找一把钥匙=>多维数组中的值,但返回父键?

时间:2013-09-17 14:30:50

标签: php spl

我正在尝试遍历一个数组,并返回一个数组的键和子数组,该数组具有set key =>值。

例如......

假设我有

array(0 => array("chicken" => "free"), 1 => array("chicken" => "notfree"));

我想获取数组array("chicken" => "notfree")并知道父键是1

我有以下......

function search($array, $key, $value) {
    $arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

    foreach($arrIt as $sub) {
        $subArray = $arrIt->getSubIterator();
        $subKey = $arrIt->key();
        if(isset($subArray[$key]) && $subArray[$key] === $value) {
            return array("key" => $subKey, "array" => iterator_to_array($subArray));
        }
    }
}

我可以轻松获取"chicken" => "notfree",但我似乎无法获取父键,$arrIt->key()一直返回null?有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您必须在foreach循环中设置一个键值,这将是您在阵列中当前位置的关键。

foreach ($array as $key => $value) {
    //$key here is your 0/1
    foreach ($value as $_key => $_value) {
        //the inner pairs
        //e.g. $_key = 'chicken' & $_value = 'free'
    }
}

您不需要创建一个已将其放置在某个级别的迭代器。

答案 1 :(得分:0)

使用foreach的双参数形式,因此您获得包含“父”键的变量:

foreach($arrIt as $parentKey => $sub) {
    ....
    if(isset(...)) {
        return $parentKey;
    }
}

答案 2 :(得分:0)

$parent_key_set = null;
foreach ($parse as $parent_key => $child) {
    if (array_key_exists($key, $child)) {
        $parent_key_set = $parent_key;
        break;
    }
}

return $parent_key_set;