2

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

例如...

假设我有

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?有任何想法吗?

4

3 回答 3

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'
    }
}

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

于 2013-09-17T14:36:43.800 回答
0

使用 的两个参数形式foreach,因此您会得到一个包含“父”键的变量:

foreach($arrIt as $parentKey => $sub) {
    ....
    if(isset(...)) {
        return $parentKey;
    }
}
于 2013-09-17T14:33:48.470 回答
0
    $parent_key_set = null;
    foreach ($parse as $parent_key => $child) {
        if (array_key_exists($key, $child)) {
            $parent_key_set = $parent_key;
            break;
        }
    }
    

返回 $parent_key_set;

于 2019-08-11T08:45:24.377 回答