wake-up-neo.com

PHP foreach mit geschachteltem Array?

Ich habe ein verschachteltes Array, in dem ich eine Teilmenge der Ergebnisse anzeigen möchte. Zum Beispiel möchte ich in dem darunter liegenden Array alle Werte in geschachtelten Arrays [1] durchlaufen.

 Array 
 (
 [0] => Array 
 (
 [0] => Eins 
 [1] => Array 
 (
 [0] = > 1 
 [1] => 2 
 [2] => 3 
) 
) 

 [1] => Array 
 (
 [0] => zwei 
 [1] => Array 
 (
 [0] => 4 
 [1] => 5 
 [2] => 6 
) 
 ) 

 [2] => Array 
 (
 [0] => drei 
 [1] => Array 
 (
 [0] => 7 
 [1] => 8 
 [2] => 9 
) 
) 
) 

Ich habe versucht, die Foreach-Funktion zu verwenden, aber ich kann nicht scheinen, dass dies funktioniert. Dies war meine ursprüngliche Syntax (obwohl mir klar ist, dass sie falsch ist). 

 $ tmpArray = Array (Array ("Eins", Array (1,2,3)), Array ("Zwei", Array (4,5,6)), Array ("Drei", Array (7, 8,9))); 

 Foreach ($ tmpArray [1] als $ value) {
 echo $ value; 
} 

Ich habe versucht, einen Variablenvergleich zu vermeiden, wenn der Schlüssel mit dem Schlüssel übereinstimmt, den ich suchen möchte, d. H.

 foreach ($ tmpArray als $ key => $ value) {
 if ($ key == 1) {
 echo $ value; 
 } 
} 

Irgendwelche Ideen?

34
noangel

Wenn Sie die Anzahl der Ebenen in verschachtelten Arrays kennen, können Sie einfach verschachtelte Schleifen ausführen. So wie:

//  Scan through outer loop
foreach ($tmpArray as $innerArray) {
    //  Check type
    if (is_array($innerArray)){
        //  Scan through inner loop
        foreach ($innerArray as $value) {
            echo $value;
        }
    }else{
        // one, two, three
        echo $innerArray;
    }
}

wenn Sie die Tiefe des Arrays nicht kennen, müssen Sie Rekursion verwenden. Siehe Beispiel unten:

//  Multi-dementional Source Array
$tmpArray = array(
    array("one", array(1, 2, 3)),
    array("two", array(4, 5, 6)),
    array("three", array(
            7,
            8,
            array("four", 9, 10)
    ))
);

//  Output array
displayArrayRecursively($tmpArray);

/**
 * Recursive function to display members of array with indentation
 *
 * @param array $arr Array to process
 * @param string $indent indentation string
 */
function displayArrayRecursively($arr, $indent='') {
    if ($arr) {
        foreach ($arr as $value) {
            if (is_array($value)) {
                //
                displayArrayRecursively($value, $indent . '--');
            } else {
                //  Output
                echo "$indent $value \n";
            }
        }
    }
}

Der folgende Code zeigt nur verschachtelte Felder mit Werten für Ihren speziellen Fall an (nur 3. Ebene)

$tmpArray = array(
    array("one", array(1, 2, 3)),
    array("two", array(4, 5, 6)),
    array("three", array(7, 8, 9))
);

//  Scan through outer loop
foreach ($tmpArray as $inner) {

    //  Check type
    if (is_array($inner)) {
        //  Scan through inner loop
        foreach ($inner[1] as $value) {
           echo "$value \n";
        }
    }
}
56
Alex
foreach ($tmpArray as $innerArray) {
    //  Check type
    if (is_array($innerArray)){
        //  Scan through inner loop
        foreach ($innerArray as $value) {
            echo $value;
        }
    }else{
        // one, two, three
        echo $innerArray;
    }
}

Perfekt für mich gearbeitet .... versuchen Sie es

3
Pratik Sawant

Beide Syntaxen sind korrekt. Das Ergebnis wäre jedoch Array. Sie möchten wahrscheinlich so etwas tun:

foreach ($tmpArray[1] as $value) {
  echo $value[0];
  foreach($value[1] as $val){
    echo $val;
  }
}

Dadurch werden die Zeichenfolge "two" ($ value [0]) und die Ganzzahlen 4, 5 und 6 aus dem Array ($ value [1]) ausgegeben.

2
2ndkauboy

Wie wäre es mit diesen Daten:

[0] => Array (
    [item] => null
    [count] => 0
    [child] => Array (
        [1] => Array (
            [item] => 1
            [count] => 6
            [child] => Array (
                [5] => Array (
                    [item] => 5
                    [count] => 3
                    [child] => Array (
                        [4] => Array (
                            [item] => 4
                            [count] => 1
                            )
                        )
                    )
                [3] => Array (
                    [item] => 3
                    [count] => 2
                    [child] => Array (
                        [4] => Array (
                            [item] => 4
                            [count] => 1
                            )
                        )
                    )
                )
            )
        [3] => Array (
            [item] => 3
            [count] => 1
            [child] => Array (
                [4] => Array (
                    [item] => 4
                    [count] => 1
                    )
                )
            )
        )
    )

Kannst du alle Wege bekommen? Daten sehen aus wie ein binärer Baum. Hilfe benötigen

0
mario caseres