如何检查多维数组中是否存在值并返回该数组

时间:2017-01-22 20:02:05

标签: php arrays multidimensional-array

我试图弄清楚如何编写一个能做两件事的函数。

  1. 在多维数组中搜索特定值(简单)
  2. 返回其中包含值的数组。
  3. 我整个周末一直在寻找,而且我已经接近了,但这件事正在踢我的屁股。

    这是我的阵列:

    $keys = array(
    'core'    => array(
        'key'       => 'key1',
        'directory' => "$core_dir/"
    ),
    'plugins' => array(
        'key'       => 'key2',
        'directory' => "$core_dir/plugins/"
    ),
    'themes'  => array(
        'key'       => 'key3',
        'directory' => "$core_dir/$themes_dir/",
        'theme'     => array(
            'theme1' => array(
                'key'       => 'theme_key1',
                'directory' => "$core_dir/$themes_dir/theme1/"
            ),
            'theme2'     => array(
                'key'       => 'theme_key2',
                'directory' => "$core_dir/$themes_dir/theme2/"
            )
        )
    ),
    
    'hooks'   => 'hook_key'
    );
    

    所以我搜索key1它将返回core数组。 如果我搜索theme_key1,它将返回theme1数组。

    这里是我迄今为止的功能:(从分配阅读和我在网上发现的另一个功能中将它拼接在一起)。

    function search_in_array($srchvalue, $array){
    global $theme_key, $ext_key;
    
    if (is_array($array) && count($array) > 0){
        $foundkey = array_search($srchvalue, $array);
    
        if ($foundkey === FALSE){
    
            foreach ($array as $key => $value){
                if (is_array($value) && count($value) > 0){
                    $foundkey = search_in_array($srchvalue, $value);
    
    
                    if ($foundkey != FALSE){
                        if(isset($_GET['th'])){
    
                            $theme_array = $value;
    
                            return $theme_array;
                        }else{
                            return $value;
                        }
    
                    }
                }
            }
        }
        else
            return $foundkey;
    }
    

    }

2 个答案:

答案 0 :(得分:1)

不要太复杂。您可以使用递归函数深入嵌套数组。

function return_array($arr, $value) {
    $arr_found = array();
    foreach($arr as $key => $arr_value) {
        if(is_array($arr_value)) {
            if(in_array($value, $arr_value)) {
                return array($key => $arr_value);
            }
            $arr_found = return_array($arr_value, $value);
        } else {
            if($arr_value == $value) {
                $arr_found = array($key => $arr_value);
            }
        }
    }

    return $arr_found;
}

echo "<p>" . var_dump(return_array($keys, 'key1')) . "</p>";
echo "<p>" . var_dump(return_array($keys, 'theme_key1')) . "</p>";

希望它有所帮助!

答案 1 :(得分:1)

  
      
  1. 在多维数组中搜索特定值(简单)返回

  2.   
  3. 包含值的数组。

  4.   

使用RecursiveIteratorIteratorRecursiveArrayIteratoriterator_to_array函数的简短解决方案:

$search_value = 'theme_key2';
$it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($keys));
$arr = [];
foreach ($it as $v) {
    if ($v == $search_value) {
        $arr = iterator_to_array($it->getInnerIterator());
        break;
    }
}

print_r($arr);

输出将是:

Array
(
    [key] => theme_key2
    [directory] => <your custom variable values here -> $core_dir/$themes_dir>/theme2/
)