Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Gestione array multidimensionale

    Ciao, sto cominciando a programmare in php e mi sono scontrata con la gestione di un array multidimensionale. Ho letto tutti i post sull'argomento e sono riuscita a riempirlo (dinamicamente) e ottengo con print_r:

    Array (
    [0] => Array ( [0] => 001 [1] => <num type="bid">MAP000001</num>\n )
    [1] => Array ( [0] => 100 [1] => <unittitle>Titolo / Autore</unittitle>\n )
    [2] => Array ( [0] => 500 [1] => <note>Note</p>\n )
    [3] => Array ( [0] => 500 [1] => <note>Note2</p>\n )
    )

    non riesco a visualizzarlo, ho provato in vari modi, vi posto l'ultimo:

    for ($b=0; $b<count($record); $b++){
    echo "$record[$b][1]
    ";
    }

    mi visualizza:

    Array[1]
    Array[1]
    Array[1]
    Array[1]

    Chi mi dice dove sbaglio?
    grazie
    ciao
    Francesca

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Prova con foreach

    http://php.net/foreach

  3. #3
    Grazie,
    ho sostituito al ciclo for questo:

    foreach ($record as $v1) {
    foreach ($v1 as $v2) {
    echo "$v2
    ";
    }
    }

    ed ho ottenuto questa visualizzazione:

    001
    <num type="bid">MAP000001</num>\n
    100
    <unittitle>Titolo / Autore</unittitle>\n
    500
    <note>Note</p>\n
    500
    <note>Note2</p>\n

    però non mi è sufficiente, non ho ancora capito come manipolare le variabili nell'array.
    Considera che devo ricercare un determinato codice e visualizzare il contenuto che gli corrisponde, es. cerco 100 come valore nell'array e visualizzo <unittitle>Titolo / Autore</unittitle>\n

    :-(

  4. #4
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Originariamente inviato da francescalep
    Grazie,
    ho sostituito al ciclo for questo:

    foreach ($record as $v1) {
    foreach ($v1 as $v2) {
    echo "$v2
    ";
    }
    }

    ed ho ottenuto questa visualizzazione:

    001
    <num type="bid">MAP000001</num>\n
    100
    <unittitle>Titolo / Autore</unittitle>\n
    500
    <note>Note</p>\n
    500
    <note>Note2</p>\n

    però non mi è sufficiente, non ho ancora capito come manipolare le variabili nell'array.
    Considera che devo ricercare un determinato codice e visualizzare il contenuto che gli corrisponde, es. cerco 100 come valore nell'array e visualizzo <unittitle>Titolo / Autore</unittitle>\n

    :-(
    puoi specificare anche le chiavi nel foreach:

    Codice PHP:
    foreach ($record as $k1 => $v1) {
        foreach (
    $v1 as $k2 => $v2) {         
            
    $record[$k1][$k2] = 'nuovo valore';     
        } 

    in questo modo puoi modificare i valori che vuoi

  5. #5
    Ho un po' modificato le istruzioni che mi hai suggerito e sono riuscita ad ottenere quello che volevo, però non mi sembra una soluzione pulitissima:

    foreach ($record as $k1 => $v1) {
    foreach ($v1 as $k2 => $v2) {
    if ($flag==1){
    echo $v2."
    ";
    $flag=0;
    }
    if ($k2==0){
    if ($v2=="100"){
    $flag=1;
    }
    }
    }
    }

    In pratica quando trovo la chiave che mi interessa (che è sempre la prima del sottoarray) valorizzo il flag, così quando leggo la chiave successiva (cioé la seconda del sottoarray) la visualizzo in base al flag.
    Che dici si può migliorare?

  6. #6
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Originariamente inviato da francescalep
    Ho un po' modificato le istruzioni che mi hai suggerito e sono riuscita ad ottenere quello che volevo, però non mi sembra una soluzione pulitissima:

    foreach ($record as $k1 => $v1) {
    foreach ($v1 as $k2 => $v2) {
    if ($flag==1){
    echo $v2."
    ";
    $flag=0;
    }
    if ($k2==0){
    if ($v2=="100"){
    $flag=1;
    }
    }
    }
    }

    In pratica quando trovo la chiave che mi interessa (che è sempre la prima del sottoarray) valorizzo il flag, così quando leggo la chiave successiva (cioé la seconda del sottoarray) la visualizzo in base al flag.
    Che dici si può migliorare?
    Sicuramente puoi mettere i due "if" consecutivi su unico "if" (usando "&&").
    Se comunque il tuo array è fatto nel modo descritto inizialmente e non hai veramente una conoscenza a priori delle chiavi, vedo poche alternative.
    Se invece sai che la struttura dell'array è fissa, cioè se sai che devi cercare 100 nella chiave 0 e tirar fuori il valore della chiave 1, allora puoi risparmiarti il foreach interno e accedere direttamente a $v1[0] e $v1[1]

  7. #7
    Grazie mille!
    La seconda che hai detto!!

    Ho finalmente risolto:

    $cerca = array('500', '100', '001');

    for ($b=0; $b<count($cerca); $b++){
    foreach ($record as $k1 => $v1) {
    if ($v1[0]==$cerca[$b]) {
    $recxml[]=$v1[1];
    }
    }
    }
    for ($b=0; $b<count($recxml); $b++){
    echo "$recxml[$b]
    ";
    }

    Conoscendo i valori che possono essere assunti dal codice numerico li infilo in un array $cerca nell'ordine in cui voglio (che non è né crescente né decrescente). In questo modo cerco i codici numerici e carico il secondo elemento in un nuovo array nell'ordine che mi serve per stamparli.
    Grazie ancora, sei stato veramente gentile e... utile!

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.