@Allarion

Как найти в многомерном ассоциативном массиве значение и вывести массив данных по ключам php?

Добрый день! Есть многомерный ассоциативниый массив с данными с разными уровнями вложенности. Примерно вот такой:
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;
}
  • Вопрос задан
  • 9078 просмотров
Решения вопроса 1
@Allarion Автор вопроса
Решение
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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
В тексте есть одно правильное слово - "рекурсивно". Вот и напишите рекурсивную функцию. На вход - массив, на выход новый массив, внутри foreach и при необходимости РЕКУРСИЯ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы