Php 如何查找矩阵中是否存在密钥
我有一个具有以下结构的矩阵(它是动态的,可能包含也可能不包含这些键(甚至更多)) 我需要做的是找到$var\u with\u data\u col\u name是否存在 使用我可以检查“where”或“like”是否存在,但我找不到一种方法在它们内部检查特定的密钥Php 如何查找矩阵中是否存在密钥,php,arrays,matrix,multidimensional-array,Php,Arrays,Matrix,Multidimensional Array,我有一个具有以下结构的矩阵(它是动态的,可能包含也可能不包含这些键(甚至更多)) 我需要做的是找到$var\u with\u data\u col\u name是否存在 使用我可以检查“where”或“like”是否存在,但我找不到一种方法在它们内部检查特定的密钥 附言: $var\u和\u data\u col\u name将是一个包含以下字符串之一的变量: - data_col1 - data_col2 - data_col3 通过“主数组”进行排序,并使用相同的函数检查每个“子数
附言: $var\u和\u data\u col\u name将是一个包含以下字符串之一的变量:
- data_col1
- data_col2
- data_col3
通过“主数组”进行排序,并使用相同的函数检查每个“子数组”的键。您不能直接在多维数组中搜索数组键或值。遍历数组并搜索它
$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;
}
}
你可以用这个-
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)
您可以使用这段代码,它为您提供了一个键..其中包含您的$var\u和\u data\u col\u名称
$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]);
}
我相信已经有了一个功能,更多的是锻炼自己
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\u key\u exists”来that@SnehalS但它根本无法通过阵列的部门工作。需要调用一个测试函数recursively@Michel:不幸的是,由于输入中(缺少)限制,您必须使用递归函数。@Michel也许您应该指出您不想使用此解决方案的原因?在项目生命周期中,人们一直在编写自己的实用程序/助手函数。检查这个问题和答案——标记的答案指出了如何使数组的递归函数如所说。递归是一种方法:/+1这是一种“有趣”的方法。
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;
}