"free"), 1 => array("chicken" => "notfree"));И я хочу получить массив array("ch" />
Вопрос:

Найти ключ => значение в многомерном массиве, но вернуть родительский ключ?

php spl

2124 просмотра

3 ответа

5098 Репутация автора

Я пытаюсь перебрать массив и вернуть ключ и дочерний массив массива, который имеет значение 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()продолжает возвращать ноль? Есть идеи?

Автор: Steven Источник Размещён: 17.09.2013 02:30

Ответы (3)


0 плюса

320203 Репутация автора

Используйте форму с двумя аргументами foreach, так что вы получите переменную, содержащую «родительский» ключ:

foreach($arrIt as $parentKey => $sub) {
    ....
    if(isset(...)) {
        return $parentKey;
    }
}
Автор: Marc B Размещён: 17.09.2013 02:33

1 плюс

297 Репутация автора

Решение

Вы должны установить ключевое значение внутри цикла 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'
    }
}

Вам не нужно создавать итератор, который уже поместил его на уровень ниже.

Автор: thepratt Размещён: 17.09.2013 02:36

0 плюса

3 Репутация автора

    $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;

Автор: Rodrigo Manara Размещён: 11.08.2019 08:45
Вопросы из категории :
32x32