J'ai un tableau imbriqué dans lequel je veux afficher un sous-ensemble de résultats. Par exemple, dans le tableau ci-dessous, je souhaite parcourir toutes les valeurs du tableau imbriqué [1].
Array ( [0] => Array ( [0] => un [1] => Array ( [0] = > 1 [1] => 2 [2] => 3 ) ) [1] => Tableau ( [0] => deux [1] => Tableau ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => Tableau ( [0] => trois [1] => Tableau ( [0] => 7 [1] => 8 [2] => 9 ) ) )
J'essayais d'utiliser la fonction foreach mais je n'arrive pas à obtenir que cela fonctionne. C'était ma syntaxe originale (même si je réalise que c'est faux).
$ tmpArray = array (tableau ("un", tableau (1,2,3)), tableau ("deux", tableau (4,5,6)), tableau ("trois", tableau (7, 8,9))); Foreach ($ tmpArray [1] comme $ valeur) { echo $ valeur; }
J'essayais d'éviter une comparaison de variable pour savoir si la clé est identique à la clé que je souhaite rechercher, c'est-à-dire.
foreach ($ tmpArray as $ key => $ value) { if ($ key == 1) { echo $ valeur; } }
Des idées?
Si vous connaissez le nombre de niveaux dans les tableaux imbriqués, vous pouvez simplement faire des boucles imbriquées. Ainsi:
// 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 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 affichage uniquement du tableau imbriqué avec des valeurs pour votre cas spécifique (3ème niveau uniquement)
$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;
}
}
Parfait a fonctionné pour moi .... essayez ceci
Les deux syntaxes sont correctes. Mais le résultat serait Array
. Vous voulez probablement faire quelque chose comme ça:
foreach ($tmpArray[1] as $value) {
echo $value[0];
foreach($value[1] as $val){
echo $val;
}
}
Cela affichera la chaîne "deux" ($ 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 tous les chemins? Les données ressemblent à un arbre binaire. Besoin d'aide