PHP。走多维数组?

时间:2011-10-13 06:50:01

标签: php

假设我有一个多维数组结构:

array(parent)
    array
    array
    array(parent)
        array(parent)
            ...some key I'm looking for....
        array
    array
array
array
array
array
array

我递归地迭代它以找到一个包含我正在寻找的键的数组 - 这没问题。

然后我需要走上树并为所有父母添加额外的密钥(由父母标记)。我无法绕过它。我可以轻松地递归地走下树,但我无法弄清楚如何走路。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

这是我刚刚写的一个例子,是为了得到这个想法。

注意这将在第一次出现匹配值时中断执行。

codepad link

$arr = array(
    array('a','b','c','d'),
    array(61,62,63,64,65),
    array('e','f','g','h'),
    array(6,7,8,9),
    array(1,2,array(1,2,3,4,5,6,7,8),4,5,6,7,8),
    array('i','j','k','l','m'),
);

function array_walkup( $desired_value, array $array, array $keys=array() ) {
    if (in_array($desired_value, $array)) {
        array_push($keys, array_search($desired_value, $array));
        return $keys;
    }
    foreach($array as $key => $value) {
        if (is_array($value)) {
            $k = $keys;
            $k[] = $key;
            if ($find = array_walkup( $desired_value, $value, $k )) {
                return $find;
            }
        }
    }
    return false;
}

$keys = array_walkup(3, $arr);

echo "3 has been found in \$arr[".implode('][', $keys)."]";

答案 1 :(得分:1)

您可以在课程中使用这些内容:

private $valueFound;

public function recurse($item)
{
   if ($item['special_field'] === 'value you are looking for')
   {
      $this->valueFound = $item['other_field'];
      return;
   }

   if (isset($item['child'])
   {
      recurse($item['child']);
   }

   // Use tail-recursion.
   // You are at this point past all recursion and are heading back up the tree.
   $item['field_to_set'] = $this->valueFound;
}