Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Split particolare

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Split particolare

    Ciao a tutti ragazzi..
    chiedo un vostro aiuto per questo elenco di file contenuto in una directory da stamparmi...
    nella directory ho per esempio questi file:


    3978_help.gif
    3978_web.gif
    3978_winxp.gif
    3978_utenti_test.csv
    3988_foto1.jpg
    3988_test.jpg
    3988_ciao.jpg


    con questo ciclo che funziona io mi ciclo la directory e mi vorrei stampare solo quelli che iniziano per il id=3978;

    foreach($dir as $v){
    $nomeAllegato=split("_",$v);
    $id=3978;
    if ($nomeAllegato[0]==$id) print "" . $nomeAllegato[1] . "
    ";
    }

    help.gif
    web.gif
    winxp.gif
    utenti



    naturalmente non và bene per l'ultimo fiile il nome perchè se qualcuno l'ha salvato con qualche anderscore come 3978_utenti_test.csv

    mi stampa solo

    utenti

    come posso risolvere?
    come posso dire che mi deve splittare solo il primo pezzo dove ho il mio id? e non tutto il resto?
    Ciao e buona giornata

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    240

    usa substr

    se la tua stringa è sempre composta in questo modo

    3978_help.gif --> tuo numero_nomefile.estensione

    puoi usare substring
    codice:
    foreach($dir as $v){
    
    $id=3978;
    if (substr($v, 1, 4)==$id) print "" . substr($v, 5, strlen($v)) . "
    ";
    }

  3. #3
    usa questa:


    http://it.php.net/manual/it/function.strstr.php

    se trova la stringa cercata ti restituisce la parte rimanente...

    altrienti restituisce false..

    quindi puo fare ad esempio...

    $id=3978;
    foreach($dir as $v){
    $stringa = strstr($v, $id);
    if ($stringa) print "$stringa
    ";
    }


    l'unico rischio è che può "matcharti" un file anche se l'id è diverso ma c'è quel numero più avanti nel nome del file.
    Valuta tu se è un rischio basso o alto.. e se puoi correrlo o meno.

    Oppure se tutti i file hanno sempre davanti un id della stessa lunghezza, la soluzione più semplice e sicura diventa l'uso di substr...

    Altrimenti la cosa più certa sono le espressioni regolari.

  4. #4

    Re: usa substr

    Originariamente inviato da shadir
    se la tua stringa è sempre composta in questo modo

    3978_help.gif --> tuo numero_nomefile.estensione

    puoi usare substring
    codice:
    foreach($dir as $v){
    
    $id=3978;
    if (substr($v, 1, 4)==$id) print "" . substr($v, 5, strlen($v)) . "
    ";
    }
    scusa.. quando ho iniziato a rispondere on c'era ancora la ua risposta.

    Come detto: substr va benissimo s el'id è smepre della stessa dimnesione.. in caso contrario è meglio strstr(),,, mgari in combinazione con strpos per evitare il problema di cui sopra..

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    grazie.. ragazzi...

    grazie dei consigli... io intanto avevo provato così... che dite può darmi qualche problema...


    $idmess=3988;
    foreach($dir as $v){
    $nomeAllegato= (explode('_', $v, 2));
    if ($nomeAllegato[0]==$idmess){
    print $nomeAllegato[1]. ",";
    }
    }


    che dite può essere anche una soluzione... pacchiana... visto che explode ha la possibilità di mettere il limite come parametro...?


    Ah... scusate come faccio secondo voi a togliere l'ultima virgola dall'elenco di file che mi stampa..?
    visto che mi viene fuori qulcosa del tipo:
    miofile.jpg, file.doc,utenti.csv,







    ciao e grazie ancora..

  6. #6
    scusa.. ma non è la stessa soluzione di prima?

    secondo me la migliore è la soluzione con strstr... poi fai te..


    per togliere l'ultima virgola puoi prendere la substringa che va dal primo carattere al penultimo.. ovviamente fuori dal ciclo


  7. #7
    codice:
    $found = '';
    $id = 3978;
    $len = strlen($id.'_');
    foreach($dir as $v)
    	if(strpos($v, $id.'_') === 0)
    		$found .= ''.substr($v, $len).'
    ';
    echo $found;


    codice:
    $found = '';
    $id = 3978;
    $len = strlen($id.'_');
    foreach($dir as $v)
    	if(substr($v, 0, $len) === $id.'_')
    		$found .= ''.substr($v, $len).'
    ';
    echo $found;



    [edit]
    codice:
    $id = 3978;
    $filter_prefix = create_function('&$v', 'return (strpos($v, "'.$id.'_") === 0);');
    $remove_prefix = create_function('&$v', 'return "".substr($v, strlen("'.$id.'_"))."";');
    echo implode('
    ', array_map($remove_prefix, array_filter($dir, $filter_prefix)));
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.