Find Key value in nested Multidimensional Array

一曲冷凌霜 提交于 2021-01-29 10:43:25

问题


I have an array data like this

    $array = Array ( 
         [abc] => Array ( ) 
         [def] => Array ( )
         [hij] => Array ( ) 
             [media] => Array ( 
                 [video_info] => Array ( ) 
                        [video_variants] => Array ( ) 
                                [1] => Array ( )
                                [2] => Array ( )
    ) 
) 

My code looks something like this

foreach($response->extended_entities->media as $media)
        {
        stuffs
           foreach ($media->video_info->variants as $video) 
               {
               stuffs
               }
        }

I want to check whether the "video_info Key is available in the array or not

I have tried this function but it doesn't work

function multi_array_key_exists($key, $array) {
    if (array_key_exists($key, $array))
        return true;
    else {
        foreach ($array as $nested) {
            foreach ($nested->media as $multinest) {
        if (is_array($multinest) && multi_array_key_exists($key, $multinest))
                return true;
        }
    }
    }
    return false;
}


 if (multi_array_key_exists('video_info',$response) === false)
    {
        return "failed";
    }

Please help me

Original array - https://pastebin.com/2Qy5cADF


回答1:


Here's my approach at writing a function to check the keys of your array using the Recursive Iterator classes...

function isArrayKeyAnywhere( $array, $searchKey )
{
  foreach( new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ), RecursiveIteratorIterator::SELF_FIRST ) as $iteratorKey => $iteratorValue )
  {
    if( $iteratorKey == $searchKey )
    {
      return true;
    }
  }
  return false;
}

$array = [
  'abc'=>[],
  'def'=>[],
  'hij'=>[
    'media'=>[
      'video_info'=>[
        'video_variants'=>[
          [],
          []
        ]
      ]
    ]
  ]
];

var_dump( isArrayKeyAnywhere( $array, 'video_info' ) ); // true
var_dump( isArrayKeyAnywhere( $array, 'foo_bar' ) ); // false



回答2:


try something like this (recursion)

$key = "video_info";
$invoke = findKey($array, $key);

function findKey($array, $key)
{
    foreach ($array as $key0 => $value) {
        if (is_array($value)) {
            if ($key === $key0) {
                echo 'hit: key ' . $key . ' is present in the array';
                return true;
            }
            findKey($value, $key); // recursion
        } elseif ($key === $key0) {
            echo 'hit: key ' . $key . ' is present in the array';
            return true;
        } else {
            return false;
        }
    }
}

A small note: this function is significantly faster than the accepted answer (factor 4x)



来源:https://stackoverflow.com/questions/50806604/find-key-value-in-nested-multidimensional-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!