如何查找矩阵中是否存在密钥

时间:2014-02-07 11:33:04

标签: php arrays matrix multidimensional-array

我有一个矩阵¹ ² ³,其结构如下(它是动态的,可能包含也可能不包含这些键(甚至更多))

array(
    "where" => array(
        "data_col1": "val1",
        "data_col2": "val2"
    ),
    "like" => array(
        "data_col3": "val3"
    )
);

我需要做的是找出 $ var_with_data_col_name 是否存在。

使用array_key_exists我可以检查“where”或“like”是否存在,但我找不到在其中检查特定键的方法。


PS:

$ var_with_data_col_name 是一个变量,其中一个以下字符串:

 - data_col1
 - data_col2
 - data_col3

5 个答案:

答案 0 :(得分:1)

您无法直接在多维数组中搜索数组键或值。然后遍历阵列并搜索它。

$data_column_1_exists = false;
foreach($array as $key => $value)
{
    if(array_key_exists('data_col1', $value)
        && $key == 'where' //optionally check in specific array
    )
    {
        $data_column_1_exists = true;
    }
}

答案 1 :(得分:1)

你可以使用它 -

function key_exists_level2($arr, $key){
    foreach($arr as $level1arr){
        if(isset($level1arr[$key])){
            return true;
        }
    }
    return false;
}
//And check with
key_exists_level2($arr, $var_with_data_col_name)

答案 2 :(得分:0)

遍历“主数组”并使用相同的函数检查每个“子数组”的键

答案 3 :(得分:0)

您可以使用此代码,它会为您提供key..which具有$ var_with_data_col_name。

$data = array(
 "where" => array(
    "data_col1" => "val1",
    "data_col2" => "val2"
 ),
  "like" => array(
    "data_col3" => "val3"
 )
);

$key;
$flag = false;
$data_key = 'data_col1';

foreach($data as $our_key => $array){
if(array_key_exists($data_key,$array)){
    $key = $our_key;
    $flag = true;
}
}

if($flag){
print_r($data[$key]);
}

答案 4 :(得分:0)

我确信那里已经有了一个功能,更多是我自己的练习!

function recursive_array_key_exists($needle, array $haystack) {
    if (array_key_exists($needle, $haystack)) return true;

    foreach($haystack as $value) {
        if (is_array($value)) {
            if (recursive_array_key_exists($needle, $value)) return true;
        }
    }

    return false;
}

刚看到评论链接到此答案:array_key_exists is not working

我想我的基本相同只是更少的代码!