【问题标题】:How to find if a key exist in a matrix [duplicate]如何查找矩阵中是否存在键[重复]
【发布时间】:2014-03-04 19:14:05
【问题描述】:

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

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

【问题讨论】:

  • 你应该使用递归
  • 如果要检查该变量值是否存在,则可以使用“array_key_exists”
  • @SnehalS 但它根本无法通过阵列的部门工作。需要递归调用测试函数
  • @Michel:不幸的是,鉴于输入中的(缺乏)限制,您必须使用递归函数。
  • @Michel 也许你应该指出为什么你不想使用这个解决方案?人们确实在项目生命周期中一直编写自己的实用程序/辅助函数。检查这个问题和答案 - stackoverflow.com/questions/2948948/… - 标记的答案指出如何使用 array_key_exists 制作 recusirve 函数

标签: php arrays matrix multidimensional-array


【解决方案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;
    }
}

【讨论】:

【解决方案2】:

你可以用这个 -

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)

【讨论】:

  • +1 这是一种“有趣”的做法。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您可以使用此代码,它为您提供密钥..其中包含您的 $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]);
    }
    

    【讨论】:

      【解决方案5】:

      我确定已经有一个功能,更多的是对我自己的锻炼!

      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

      我猜我的基本相同,只是代码少了!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 2016-05-02
        • 1970-01-01
        • 2019-03-09
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多