0

ある配列を再帰で別の配列に変換するにはどうすればよいですか? この例は、第 2 レベルに対してのみ機能します。

$array2 = array();
foreach ($array as $levelKey => $level) {
  foreach ($level as $itemKey => $item) {
    if (isset($array[$levelKey + 1])) {
      $array2[$item['data']['id']] = $item;
      $children = $this->searchChildren($item['data']['id'], $array[$levelKey + 1]);
      $array += $children;
    }               
  }
}

function searchChildren($parent_id, $level)
{
  $_children = array();
  foreach ($level as $key => $item) {
    if ($item['data']['parent_id'] === $parent_id) {
      $_children[$key] = $item;
    }
  }
  return $_children;
}
4

2 に答える 2

0

多次元配列を再帰的に移動するには、array_walk_recursive関数を使用します。

ドキュメントはここにあります: http://www.php.net/manual/en/function.array-walk-recursive.php

于 2013-03-07T14:32:14.200 に答える
0

再帰の使用の簡単な例を次に示します。この関数は、配列内のすべての項目の連結されたキーと値を再帰的に出力します

function printArrayWithKeys(array $input, $prefix = null) {
    foreach ($input as $key=>$value) {
        $concatenatedKey = $prefix . '.' . $key;
        if (is_array($value)) {
            printArrayWithKeys($value, $concatenatedKey);
        } else {
            print $concatenatedKey . ': ' . $value . "\n";
        }
    }
}

この関数の鍵は、別の配列に遭遇したときに自分自身を呼び出すことです(したがって、配列のすべてのレベルをトラバースし続けます)。

次のような入力で呼び出すことができます。

array(
    array(
        array( 'Hello', 'Goodbye' ),
        array( 'Again' )
    ),
    'And Again'
)

印刷される場所:

0.0.0: Hello
0.0.1: Goodbye
0.1.0: Again
1: And Again
于 2013-03-07T14:33:54.163 に答える