Вложенный php массив сглаживается путем поиска ключей с помощью рекурсии - PullRequest
0 голосов
/ 02 августа 2020

В примере 1 из нескольких вложенных массивов ниже у меня есть ключ с именем items_found. Как мне рекурсивно найти ключ и получить родительский массив, чтобы я мог вернуть результат, как в примере 2?

Пример 1

[1] => Array (
    [element_data] => Array (
        [0] => Array ( )
        [1] => Array (
            [items_found] => 1,
            [items_data] => "some important data"
    )
        [3] => Array (
            [0] Array(
                [element_data] => Array (
                    [0] => Array (
                        [items_found] => 1,
                        [items_data] => "I have some more deeply nested data 2"
                    )
                    [1] => Array ( )
                    [2] => Array ( )
                )          
            )
        )
    )
)
[2].....

Пример 2:

[0] => Array (
   [0] => Array (
      [items_found] => 1,
      [items_data] => "some important data"
   )
)
[1] => Array (
 [0] => Array (
    [items_found] => 1,
    [items_data] => "I have some more deeply nested data 2"
  )
)

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Ниже проработано

  /**
   * @param $arr
   * @return array
   */
  public static function find($arr) : array
  {
    global $net;
    function recur($a){
      foreach($a as $ind1 => $val){
        if(is_array($val)) {
          if (array_key_exists('items_found', $val)) {
            $GLOBALS['net'][] = $val;
          } else {
            recur($val);
          }
        }
      }
    }
    recur($arr);
    return $net;
  }



0 голосов
/ 02 августа 2020

Очень просто:

<?php
$a=array( "1" => Array (
             "element_data" => Array (
                  "0" => Array (),
                  "1" => Array (
                        "items_found" => 1,
                        "items_data" => "some important data"
                  ),
                  "3" => Array (
                       "0" => Array(
                          "element_data" => Array (
                              "0" => Array (
                                 "items_found" => 1,
                                 "items_data" => "I have some more deeply nested data 2"
                              ),
                             "1" => Array ( ),
                             "2" => Array ( )
                           )          
                       )
                  )
             )
         ));


$net = array();

recur($a);
function recur($a)
{
    foreach ($a as $ind1 => $val) {
        if (array_key_exists('items_found', $val) && array_key_exists('items_data', $val)) {
            $value = array();
            $value["items_found"] = $val["items_found"];
            $value["items_data"] = $val["items_data"];
            array_push($GLOBALS['net'], $value);
        } else {
            recur($val);
        }

    }
}

print_r($net);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...