PHP实现:判断多维数组中所有price列值是否与给定变量完全匹配
需求说明
给定多维数组:
$my_value_is = Array ( [2] => Array ( [id] => 2 [price] => 23), [50] => Array ( [id] => 50 [price] => 56 ) );
变量 $my_var = 56;需求为:当数组中所有price列的值都与$my_var相等时返回true,否则返回false。当前示例应返回false,因为id为2的元素price值为23,与$my_var不匹配。
错误实现分析
尝试用in_array函数实现:
$u_in_array = in_array($my_var, array_column($my_value_is , 'price')); if($u_in_array ) { echo 'value is true'; } else { echo 'value is false'; }
这段代码返回true不符合预期,原因是in_array仅判断目标值是否存在于数组中,只要有一个元素匹配就会返回true,完全不符合“所有元素都匹配”的需求。
正确实现方法
方法一:使用array_filter过滤不匹配项
$prices = array_column($my_value_is, 'price'); // 过滤出所有不等于$my_var的price值 $mismatched = array_filter($prices, function($price) use ($my_var) { return $price !== $my_var; }); // 如果没有不匹配的项,说明全部相等 $result = empty($mismatched); echo $result ? 'value is true' : 'value is false';
原理:如果过滤后得到的数组为空,证明所有price都和$my_var相等,返回true;反之存在不匹配项,返回false。
方法二:使用array_reduce累加判断
$result = array_reduce($my_value_is, function($carry, $item) use ($my_var) { // 只要有一个不匹配,carry就会变成false,后续判断不再改变结果 return $carry && ($item['price'] === $my_var); }, true); echo $result ? 'value is true' : 'value is false';
原理:初始值设为true,遍历数组时逐个判断price是否等于目标值,一旦出现不匹配项,最终结果就会变为false。
方法三:利用array_unique去重后判断
$prices = array_column($my_value_is, 'price'); // 去重后如果数组只有一个元素且等于$my_var,说明全部匹配 $result = count(array_unique($prices)) === 1 && reset($prices) === $my_var; echo $result ? 'value is true' : 'value is false';
原理:如果所有price都相等,去重后数组长度为1,且该元素等于$my_var则满足需求。
内容的提问来源于stack exchange,提问作者user19975737
相关产品推荐
相关产品推荐

