結果のサブセットを表示するネストされた配列があります。たとえば、下の配列では、ネストされたarray [1]のすべての値をループしたいと思います。
Array ( [0] => Array ( [0] => one [1] =>配列 ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] =>配列 ( [0] => two [1] =>配列 ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] =>配列 ( [0] => three [1] =>配列 ( [0] => 7 [1] => 8 [2] => 9 ) ) )
Foreach関数を使用しようとしましたが、これを機能させることができません。これは私の元の構文でした(間違っていることに気づきましたが)。
$ tmpArray = array(array( "one"、array(1,2,3))、array( "two"、array(4,5,6))、array( "three"、array( 7,8,9))); foreach($ valueとしての$ tmpArray [1]){ echo $ value; }
キーが検索したいキーと同じかどうか、つまり、変数の比較を避けようとしていました。
foreach($ key => $ valueとしての$ tmpArray){ if($ key == 1){ echo $ value; } }
何か案は?
ネストされた配列のレベル数がわかっている場合は、ネストされたループを実行できます。そのようです:
// 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;
}
}
配列の深さがわからない場合は、再帰を使用する必要があります。以下の例を参照してください。
// 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";
}
}
}
}
特定のケースの値を持つネストされた配列のみを表示する以下のコード(第3レベルのみ)
$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;
}
}
完璧な私のために働いた....これを試してください
両方の構文が正しいです。しかし、結果はArray
になります。おそらく次のようなことをしたいでしょう:
foreach ($tmpArray[1] as $value) {
echo $value[0];
foreach($value[1] as $val){
echo $val;
}
}
これにより、文字列 "two"($ value [0])と配列の整数4、5、6($ value [1])が出力されます。
このデータはどうですか:
[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
)
)
)
)
)
すべての経路を取得できますか?データはバイナリツリーのように見えます。助けが要る