Un foreach PHP avec un tableau imbriqué?
j'ai un tableau imbriqué dans laquelle je veux afficher un sous-ensemble de résultats. Par exemple, sur le tableau ci-dessous je veux boucler toutes les valeurs dans le tableau imbriqué[1].
Array ( [0] => Array ( [0] => one [1] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => Array ( [0] => two [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => Array ( [0] => three [1] => Array ( [0] => 7 [1] => 8 [2] => 9 ) ) )
j'essayais d'utiliser la fonction foreach mais je n'arrive pas à y arriver. C'était ma syntaxe originale (même si je me rends compte que c'est faux).
$tmpArray = array(array("one",array(1,2,3)),array("two",array(4,5,6)),array("three",array(7,8,9))); foreach ($tmpArray[1] as $value) { echo $value; }
je suis en essayant d'éviter une variable de comparer si la clé est la même que la clé je recherche, i.e.
foreach ($tmpArray as $key => $value) { if ($key == 1) { echo $value; } }
des idées?
4 réponses
Si vous savez le nombre de niveaux dans les tableaux imbriqués, vous pouvez simplement faire des boucles imbriquées. Comme ceci:
// 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;
}
}
si vous ne connaissez pas la profondeur du tableau, vous devez utiliser la récursivité. Voir l'exemple ci-dessous:
// 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";
}
}
}
}
le code ci-dessous avec display only nested array avec des valeurs pour votre cas spécifique (3ème niveau seulement)
$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;
}
}
Perfect a fonctionné pour moi.... essayez ceci
les deux syntaxes sont correctes. Mais le résultat serait Array
. Vous voulez probablement faire quelque chose comme ceci:
foreach ($tmpArray[1] as $value) {
echo $value[0];
foreach($value[1] as $val){
echo $val;
}
}
cela affichera la chaîne " two " ($value[0]) et les entiers 4, 5 et 6 du tableau ($value[1]).
Que Diriez-vous de ces données:
[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
)
)
)
)
)
Pouvez-vous obtenir toutes les voies? Les données ressemblent à un arbre binaire. Besoin somehelp