結果のサブセットを表示したいネストされた配列があります。たとえば、以下の配列では、ネストされた配列[1]内のすべての値をループ処理します。
配列 ( [0] => 配列 ( [0] => 1つ [1] => 配列 ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => 配列 ( [0] => 2つ [1] => 配列 ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] => 配列 ( [0] => 3つ [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 ($tmpArray[1] を $value として) { $値をエコーします。 }
私は、キーが検索したいキーと同じかどうかの変数比較を避けようとしていました。
foreach ($tmpArray を $key => $value として) { ($key == 1)の場合{ $値をエコーします。 } }
何か案は?
ベストアンサー1
ネストされた配列のレベル数がわかっている場合は、ネストされたループを簡単に実行できます。次のようになります。
// 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";
}
}
}