0
$arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk($args) {
   $keys = get_func_args();
   // ...
}

walk('aaa', 'bbb', 'ccc', 'ddd');

この関数に、この多次元配列をウォークスルーさせて、「最終的に」値を取得させたいと考えています。walk() 関数は乱数のパラメーターを取得するため、配列の次元数は不明です。

それ、どうやったら出来るの?

私はいくつかの再帰的な方法について考えました...しかし、まあ、私は何も理解できません。何か提案をいただけますか?

4

3 に答える 3

1
$arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk() {

  $keys = func_get_args();

  $array = array_shift($keys);

  foreach ($keys as $key)
  {
    $array = $array[$key];
  }

  return $array;

}

echo walk($arr, 'aaa', 'bbb', 'ccc', 'ddd'); // finally
于 2013-03-27T20:55:51.227 に答える
1

少人数クラスでご利用いただけます

$walker = new Walker($arr);
echo $walker->find('aaa', 'bbb', 'ccc', 'ddd'); //finally

クラス

class Walker {
    private $a; // array
    function __construct($a) {
        $this->a = $a;
    }

    function find() {
        $temp = $this->a;
        foreach ( func_get_args() as $key ) {
            $temp = isset($temp[$key]) ? $temp[$key] : null;
        }
        return $temp;
    }
}
于 2013-03-27T21:04:42.203 に答える
1

キーの配列とインデックスを受け取る新しい関数を作成します。新しい呼び出しごとに、最後のキーになるまでインデックスを 1 ずつ増やします。それはあなたがあなたの答えを持っていることを知っているときです!

 $arr = array('aaa' => 
   array('bbb' => 
      array('ccc' => 
         array('ddd' => 
            'finally'))));

function walk($myArray, $keys, $index) {
   if ($index == count($keys) -1){
      return $myArray[$index];
   }
   return walk($myArray[$keys[$index]],$keys,$index+1);
}

$keys = array('aaa', 'bbb', 'ccc', 'ddd');
$result = walk ($arr,$keys,0);
于 2013-03-27T21:06:28.277 に答える