ネストされた配列を使用した PHP foreach? [重複] 質問する

ネストされた配列を使用した PHP foreach? [重複] 質問する

結果のサブセットを表示したいネストされた配列があります。たとえば、以下の配列では、ネストされた配列[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";
        }
    }
}

おすすめ記事