Добрый день! Есть многомерный ассоциативниый массив с данными с разными уровнями вложенности. Примерно вот такой:
Array
(
[0] => Array
(
[name1] => FRUITS
[name2] => 50
[name3] => SHTUKA
[name4] => 90
[name5] => RUR
[name6] => Array
(
[0] => Array
(
[name1] => APPLE
[name2] => 30
[name3] => SHTUKA
[name4] => 80
[name5] => RUR
[name6] => Array
(
[0] => Array
(
[name1] => ANTONOVKA
[name2] => 20
[name3] => SHTUKA
[name4] => 70
[name5] => RUR
[name6] =>
[name7] =>
)
[1] => Array
(
[name1] => ZIMNIE
[name2] => 10
[name3] => SHTUKA
[name4] => 65
[name5] => RUR
[name6] =>
[name7] =>
)
)
[name7] =>
)
[name7] =>
)
Как можно сделать функцию, которая рекурсивно проходила бы по всему массиву, ища конкретное значение, например ANTONOVKA, и найдя его записала бы в $result данные из определенных ключей, получив на выходе примерно следующее:
$result = array(
[0] => ANTONOVKA
[1] => 20
[2] => SHTUKA
[3] => 70
[4] => RUR
)
Как я понимаю на входе должно быть:
function findArray ($ar, $findValue, $executeKeys)
$ar - сам большой массив по которому осуществляется поиск
$findValue - Value который надо найти (в примере ANTONOVKA)
$executeKeys - массив с перечнем ключей $executeKeys = array ('name1','name2','name3','name4','name5')
Решил сам свой вопрос, может кому будет полезно:
function findArray ($ar, $findValue, $executeKeys){
$result = array();
foreach ($ar as $k => $v) {
if (is_array($ar[$k])) {
$second_result = findArray ($ar[$k], $findValue, $executeKeys);
$result = array_merge($result, $second_result);
continue;
}
if ($v === $findValue) {
foreach ($executeKeys as $val){
$result[] = $ar[$val];
}
}
}
return $result;
}