Visualizzazione dei risultati da 1 a 9 su 9

Discussione: str to array

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379

    str to array

    ragazzi ho un problema abbastanza stupido ma non riesco a venirne a capo!

    ho una stringa di tipo:

    $str = [ xxx ][ yyy ][ zzz ];

    devo riuscire a farla diventare un array di tipo:

    $array = array (
    1=>"xxx",
    2=>"yyy",
    3=>"zzz"
    );


    inizialmente ho pensato ad un str_replace seguito da un esxplode e dei trim...

    dato che questa parte di codice verrebbe eseguita molto spesso ( nella stessa pagina), ho pensato che fosse troppo dispersivo e ho fatto uno scorrimeto a vettore di $str aggiungendo dei controlli ho visto cmq cmq non era la cosa migliore da fare

    poi ho pensato che magari una cosa del tenere si potesse fare con le regExp (ma io proprio non le conosco)....


    qualcuno puo darmi una mano, o suggerire qualche idea piu' lineare?

    grazie in anticipo!

  2. #2
    Codice PHP:
    <pre>
    <?php
    $str 
    "[ xxx ][ yyy ][ zzz ]";
    preg_match_all("/\[ ([a-z]+) \]/"$str$arr);

    print_r($arr[1]);
    ?>
    prova cosė

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    grazie mille della risposta

    tuttavia mi da un errore :
    Warning: preg_match_all() [function.preg-match-all]: Compilation failed: unmatched parentheses at offset 9 in C:\AppServ\www\chat\index.php on line 18


    come detto delle regExp non ne capisco proprio nulla ( sarebbe ora di andarsele a vedere )

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    forse č utile dire che quelle tre parentesi conterrano delle query o meglio delle parti di query, quindi non so se si deve scrivere di piu' di a-z xke si usano ancora caratteri tipo *?%.,= ecc

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    da ignorante ho scritto questa cosa... potete dirmi se č giusta?


    per funzionare funziona:
    Codice PHP:
    $str "[nome, cognome][ tabella ][ id = 1023 and amico = 'marco' ]";

    preg_match_all("/(\[(\s*)(.*?)(\s*)\])/is"$str$arr);

    echo 
    "<pre>";
    print_r($arr[3]);
    echo 
    "</pre>"
    e poi un altra cosa non capisco.... perche se faccio un print_r di $arr il preg_match_all mi ma cosi tanti risultati?

  6. #6
    Se ti serve catturare tutto il contenuto va bene, potresti ottimizzarla, ma sono dettagli.
    Hai tanti risultati perchč usi molti subpattern. Cioč tu hai messo, per esempio la classe \s tra parentesi, questo significa che vuoi catturare il risultato di quel subpattern (quando in realtā non te ne fai nulla).
    Prova a ripulirla delle parentesi superflue e stampati tutto l'array per vedere come cambia. Puoi anche togliere il modificatore /i che tanto non ti serve in questo caso.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    ho provato ad usare una nuova funzione giusto perche pensavo che non fosse possibile ripulire xD

    mi sembra piu' lineare cmq e piu' veloce se la metto in un ciclo saglio?

    Codice PHP:
    $arr preg_split("/(\[(\\s*))|((\\s*)\]\[(\\s*))|((\\s*)\])/"$str);

    echo 
    "<pre>";
    print_r($arr);
    echo 
    "</pre>"
    come detto non ho mai scritto un regExp in vita mia.... per questo che fanno cosi schifo!!
    AnĒkin grazie mille dei consigli

  8. #8
    non mi pare che la preg_split faccia quello che chiedi. Cmq Quando dicevo ripulire intendevo una cosa simile:

    Codice PHP:
    // l'unico subpattern che ti interessa č quello centrale
    preg_match_all("/\\[\\s*(.*?)\\s*\\]/s"$str$arr);

    // questa č un'altra versione  
    preg_match_all('/(?<=\\[)[^\\]]+/'$str$arr); 
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    grazie si ho usato la prima... la seconda non la capisco ma funziona


    grazie mille ancora!

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.