Visualizzazione risultati 1 fino 16 di 16

Discussione: Estrazione stringa da array

  1. #1
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito Estrazione stringa da array

    Salve a tutti

    ho questo array $row->also_known

    Codice:
    array(1) { [0]=> string(377) ""3-D Animated Homeless Child Remi" (1977) ENG (International: English title) ,
    "3-D Animation: Homeless Remi" (1977) ENG (International: English title) ,
    "Nobody's Boy Remi" (1977) ENG (USA) ,
    "Nobody's Boy: Remi" (1977) ENG (International: English title) (imdb display title) ,
    "Remì le sue avventure" (1979) ENG (Italy" }
    dovrei estrarre solo

    Codice:
    "Remì le sue avventure" (1979) ENG (Italy" }
    ho provato cosi ma mi ritorna tutta la stringa

    Codice PHP:
    $titoloitaliano = $row->also_known;
    preg_match_all('/(.*Italy)/', $titoloitaliano, $ita);
    $ita = $ita[0];

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se ita viene fornito, viene riempito con i risultati della ricerca. $ita[0] conterrà il testo che corrisponde al pattern completo, $ita[1] conterrà il testo che corrisponde al primo subpattern tra parentesi acquisito e così via.
    Ecco la definizione dal manuale php.net usa da $ita[1] in poi.
    Codice PHP:
    $titoloitaliano = $row->also_known;
    $ita = NULL;
    unset(
    $ita);
    if(
    preg_match_all('/(.*Italy)/', $titoloitaliano, $ita)) {
    if(
    $ita) {
    $nuova_ita = $ita[1];
    // anche $ita[1] funziona non è necessario creare la variabile $nuova_ita
    }
    }
    Non modificare verso stringa ma crea una nuova variabile.
    Ultima modifica di darbula : 16-12-2022 alle ore 15.57.14

  3. #3
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Infatti 0 sta per il pattern quando senza errore mentre tra parentesi tonde significa dal primo e dunque $ita[1];
    ciao darbula

    purtroppo non funziona

    Codice PHP:
    $titoloitaliano = $row->also_known;

    preg_match_all('/.*Italy*\)/s', $titoloitaliano, $ita);
    $ita = $ita[1];

    foreach(
    $ita as $itas)

    echo
    "<h1> $itas </h1>";



    premetto che visualizzo gia' i dati in una tab , ma completi, ma vorrei visualizzare anche il titolo italiano (se presente Italy) nella pagina principale sopra il titolo originale





    una parte della query e' composta cosi (uso Postgresql)


    Codice:
    array_to_string( ARRAY_AGG ( DISTINCT '<b>' || akatitles.title || '</b>  ' || COALESCE (akatitles.language, 'missing' ) || ' ' || akatitles.addition ), ' ,<br> ' ) AS also_known,

    impostando cosi , visualizzo questo

    Codice PHP:
    $ita = $ita[0;

    Ultima modifica di blackskyisback : 16-12-2022 alle ore 15.48.32

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Ho modificato il messaggio non devi ed è sbagliato da variabile array convertire a variabile stringa se è la medesima variabile :)

  5. #5
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Se ita viene fornito, viene riempito con i risultati della ricerca. $ita[0] conterrà il testo che corrisponde al pattern completo, $ita[1] conterrà il testo che corrisponde al primo subpattern tra parentesi acquisito e così via.
    Ecco la definizione dal manuale php.net usa da $ita[1] in poi.
    Codice PHP:
    $titoloitaliano = $row->also_known;
    $ita = NULL;
    unset(
    $ita);
    if(
    preg_match_all('/(.*Italy)/', $titoloitaliano, $ita)) {
    if(
    $ita) {
    $nuova_ita = $ita[1];
    // anche $ita[1] funziona non è necessario creare la variabile $nuova_ita
    }
    }
    Non modificare verso stringa ma crea una nuova variabile.
    niente, non va, var_dump

    Codice PHP:
    array(1) { [0]=> string(377) ""3-D Animated Homeless Child Remi" (1977) ENG (International: English title) ,
    "
    3-D Animation: Homeless Remi" (1977) ENG (International: English title) ,
    "
    Nobody's Boy Remi" (1977) ENG (USA) ,
    "Nobody'
    s Boy: Remi" (1977) ENG (International: English title) (imdb display title) ,
    "
    Remì le sue avventure" (1979) ENG (Italy" }

    risultato
    "3-D Animated Homeless Child Remi" (1977) ENG (International: English title) ,
    "3-D Animation: Homeless Remi" (1977) ENG (International: English title) ,
    "Nobody's Boy Remi" (1977) ENG (USA) ,
    "Nobody's Boy: Remi" (1977) ENG (International: English title) (imdb display title) ,
    "Remì le sue avventure" (1979) ENG (Italy
    "Rittai anime ie naki ko Remi" (1977)
    codice

    Codice PHP:
    $titoloitaliano = $row->also_known;
    $ita = NULL;
    unset(
    $ita);
    if(
    preg_match_all('/(.*Italy)/', $titoloitaliano, $ita)) {
    if(
    $ita) {
    $nuova_ita = $ita[1];

    //var_dump($nuova_ita);

    foreach($nuova_ita as $itas)

    echo
    "<h1> $itas </h1>";
    }
    }

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Si il pattern .* recupera ogni cosa prima di Italy. È il risultato atteso.
    Invece devi usare $array = explode(',', $row->also_known);
    e il foreach per scorrere e confrontare se esiste Italy alla fine della stringa poiché non è noto il testo da poter inserire in ricerca (prima di Italy).
    Pero non vedo la chiave 1, il var_dump è dentro il foreach? Altrimenti se fuori e non esiste la chiave 1 ti dice non corrispondente con Italy il che se commento multilinea va aggiunto il modificatore m.
    Ultima modifica di darbula : 16-12-2022 alle ore 16.31.31

  7. #7
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Si il pattern .* recupera ogni cosa prima di Italy. È il risultato atteso.
    Invece devi usare $array = explode(',', $row->also_known);
    e il foreach per scorrere e confrontare se esiste Italy alla fine della stringa poiché non è noto il testo da poter inserire in ricerca (prima di Italy).
    Pero non vedo la chiave 1, il var_dump è dentro il foreach? Altrimenti se fuori e non esiste la chiave 1 ti dice non corrispondente con Italy il che se commento multilinea va aggiunto il modificatore m.
    su tuo suggerimento ho riscritto il codice da zero e ci sono risultati

    solo che manca la parentesi di chiusura dopo Italy





    Codice PHP:

    <?php

    $array
    = explode(',', $row->also_known);

    foreach(
    $array as $titoloitaliano)

    preg_match_all('/(.*Italy)/', $titoloitaliano, $ita);
    $ita = $ita[1];
    foreach(
    $ita as $itas)
    echo
    "<h1> $itas </h1>";

    var_dump($ita);


    ?>

  8. #8
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    rettifica, funziona con quello sopra, ma non con questo

    il motivo e che ci sono 2 Italy (dati da imdb)

    Ultima modifica di blackskyisback : 16-12-2022 alle ore 18.08.42

  9. #9
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    uguale anche con questo



  10. #10
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se vuoi il primo Italy è sufficiente inserire il break dentro il foreach che ferma il codice, oppure usi preg_match invece di preg_match_all
    Ultima modifica di darbula : 16-12-2022 alle ore 18.38.37

  11. #11
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Se vuoi il primo Italy è sufficiente inserire il break dentro il foreach che ferma il codice, oppure usi preg_match invece di preg_match_all
    con break spariscono tutti i dati, preg_match ritorna array(0) { }



    o il sospetto che il regex e' sbagliato

  12. #12
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se con la funzione explode
    Codice PHP:
    $array = explode(',', $row->also_known);

    foreach(
    $array as $titoloitaliano) {

    if(
    preg_match('/(.*Italy)/', $titoloitaliano, $ita)) {
    if(!empty(
    $ita[1])) {
    echo
    "<h1> $ita[1] </h1>";
    break;
    }
    }
    $ita = NULL;
    unset(
    $ita);
    }
    // fine foreach
    break interrompe l'esecuzione dello script, se dopo esiste echo non ci arriva mai
    Ultima modifica di darbula : 16-12-2022 alle ore 19.27.59

  13. #13
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    var_dump($array; del primo foreach

    array(6) { [0]=> string(41) ""Casa Keaton" (1982) ENG (Italy) " [1]=> string(46) "
    "Casa Keaton" (1982) ITA (Italy) " [2]=> string(55) "
    "Familienbande" (1982) ENG (West Germany) " [3]=> string(55) "
    "Familienbande" (1982) GER (West Germany) " [4]=> string(71) "
    "Familienbande" (1991) ENG (Germany) (imdb display title) " [5]=> string(59) "
    "Jede Menge Familie" (1982) ENG (West Germany)" }

  14. #14
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    È uno solo il foreach. Il secondo inserito da te è errato.

  15. #15
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    risolto, era sbagliata la regex

    questa funziona

    Codice:
    (.*Italy.)/iU
    Codice PHP:
    <?php

    $array
    = explode(',', $row->also_known);

    foreach(
    $array as $titoloitaliano)

    if(
    preg_match_all('/(.*Italy.)/iU', $titoloitaliano, $ita)){
    $ita = $ita[1];
    foreach(
    $ita as $itas)
    echo
    "$itas";
    }
    //var_dump($array).'<br>';
    ?>


    grazie darbula
    Ultima modifica di blackskyisback : 16-12-2022 alle ore 19.33.24

  16. #16
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    migliorata la regex, adesso restituisce il testo completo (con addition)

    (.*Italy.*)/i
    grazie

Tags for this Thread

Regole di scrittura

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