Visualizzazione risultati 1 fino 9 di 9

Discussione: [PHP] in_array che funziona male!

  1. #1
    Guest

    Post [PHP] in_array che funziona male!

    Ciao a tutti, sto creando uno script e mi ritrovo in O_o... (problemi)
    Ecco dunque quello che devo fare: ho creato un file config.php e messo dentro questo:
    Codice PHP:
    $img_tipo = array("file_tipo1.png","file_tipo3.png","file_tipo3.png"); # nomi delle img del tipo di file...
    $img_est = array(
    "tipo1" => array("zip","rar"),
    "tipo2" => array("html","php","css","htm"),
    "tipo3" => array("jpg","jpeg","png","bmp")
    );
    Ora nel mostrare i file io metto questo:
    Codice PHP:
    if(in_array(estensione($file), $img_est)) {
    if(
    in_array($img_est,$img_tipo)) {
    echo
    "<td><img src=\"mypf/$img_tipo.png\" alt=\"file\" /></td>";
    } else { echo
    "<td><img src=\"mypf/file.png\" alt=\"file\" /></td>"; }
    } else { echo
    "<td><img src=\"mypf/file.png\" alt=\"file\" /></td>"; }
    Solo che mi mostra sempre:
    Codice PHP:
    <td><img src="mypf/file.png" alt="file" /></td>
    Perchè? xD Cosa sto sbagliando? xD
    Grazie 1000..ciao Davide! ^^

    PS. Io con gli array non ci so "giocare"....anche perchè questa è la prima volta che li uso! xD

    Edit: Non credo che serva..cmq ecco la funzione estensione():
    Codice PHP:
    function estensione($nomefile) {
    return
    strtolower(str_replace(".", "", strrchr($nomefile, ".")));
    }
    Ultima modifica di sIM : 26-02-2009 alle ore 16.06.11

  2. #2
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    prova a girare la situazione in tuo favore, non farti battere dal php :P
    Codice PHP:
    <?
    function estensione($filename){
    $filename=explode("/",$filename);
    $n=count($filename)-1;
    $filename=explode(".",$filename[$n]);
    $n=count($filename)-1;
    return
    $filename[$n];
    }

    $files=glob("*");
    $ext_icons=array(
    "zip"=>"archivio",
    "rar"=>"archivio",
    "php"=>"codice",
    "asp"=>"codice",
    "txt"=>"testo"
    );

    foreach(
    $files as $file){
    if(isset(
    $ext_icons[estensione($file)])){
    echo
    "<br/>".$ext_icons[estensione($file)]." - ".$file;
    }else{
    echo
    "<br/> Unknow - ".$file;
    }
    }

  3. #3
    Guest

    Predefinito

    bah. Io userei il mime-type per verificare il tipo del file.

  4. #4
    Guest

    Predefinito

    Ok..Grazie! ^^
    Ora ho un problema io sto usando la funzione sort()! Solo che non viene eseguita come dovrebbe perchè tutti i file li ordina ma mi rimane sempre il file " *.txt " sopra per cui non me lo ordina per nome invece il resto si..perchè? Grazie 1000...ciao Davide! ^^

  5. #5
    Guest

    Predefinito

    Ho visto il tuo script in azione sul tuo sito: il problema sono i caratteri maiuscoli,che vengono considerati minori di quelli minuscoli (infatti nella tabella ASCII vengono prima). Una soluzione sarebbe di convertire tutti i nomi dei file in minuscolo/maiuscolo, poi li visualizzi:
    Codice PHP:
    <?php
    $files
    = array("text.txt", "home.php", "image.png", "altro.html", "video.avi", "ZZZ.txt");

    // converto in minuscolo
    $files_2 = array();
    foreach(
    $files as $nome) {
    $files_2[] = strtolower($nome);
    }

    sort($files_2); // ordino

    // visualizzo
    foreach($files_2 as $nome) {
    echo
    "$nome<br>\n";
    }
    ?>
    Ma, come si vede anche nell'esecuzione del tuo script, metti anche il collegamento al file. Se mi dai un attimo di tempo vedo se riesco a crearne uno più adatto.

  6. #6
    Guest

    Predefinito

    No no risolto! :D ...avevo pensato a questa cosa del carattere grande... solo non c'è una funzione dopo che visualizzi il carattere normale?
    Io con strtolower lo faccio tutto minuscolo ma dopo come potrei farlo ritornare di default con le iniziali grande o altro? xD
    Ciauuu! ^^

    Edit: risolto con natcasesort()... ahahahah (risata da scienziato pazzo! é_é)
    Ultima modifica di sIM : 27-02-2009 alle ore 13.17.36

  7. #7
    Guest

    Predefinito

    Sono riuscito a creare la funzione che fa per te:
    Codice PHP:
    <?php

    // array contenete i files
    $files = array("ZZZ2.txt", "text.txt", "Asd.c", "home.php", "image.png", "altro.html", "video.avi", "ZZZ.txt");

    // restituisce l'array ordinato con i valori originali
    function mySort($arr) {
    $minArr = array(); // contiene tutti i valori convertiti in minuscolo

    foreach($arr as $val) {
    $minArr[] = strtolower($val); // gli assegno i valori minuscoli
    }

    sort($minArr); // lo ordino

    $ordArr = array(); // array ordinato con i valori originali

    foreach($minArr as $nomeMin) {
    foreach(
    $arr as $nomeOrig) {
    if(
    strcasecmp($nomeMin, $nomeOrig)==0) {
    // quando $nomeMin e $nomeOrig sono uguali (strcasecmp() è case insensitive) aggiungo il nome originale in coda a $ordArray
    $ordArr[] = $nomeOrig;
    }
    }
    }

    return
    $ordArr;
    }

    $files = mySort($files);

    foreach(
    $files as $nome) {
    echo
    "$nome<br>\n";
    }

    ?>

  8. #8
    Guest

    Predefinito

    ..ho già risolto!
    Mi dispiace averti fatto lavorare tanto! ^^
    Ciau! ^^

  9. #9
    Guest

    Predefinito

    Ah ok scusa, non avevo visto l'edit ;). Comunque tranquillo, mi piace provare a risolvere queso genere di problemi.
    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •