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?
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";
}
}
}
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
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.
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