提问人:user19975737 提问时间:7/6/2023 最后编辑:user19975737 更新时间:7/7/2023 访问量:50
true,如果给定变量与 php 中给定数组(多维)中的所有元素/列匹配
true, if given variable is matching all element/column in given array ( Multidimensional ) in php
问:
数组:
$my_value_is = Array ( [2] => Array ( [id] => 2 [price] => 23) [50] => Array ( [id] => 50 [price] => 56 ) )
$my_var = 56;
如果所有列(价格)都与给定的变量值匹配,我需要它返回 true;否则,它应返回 false。
因此,根据我的 $my_var,我应该得到结果为 false,因为 id:2 的价格:23 不匹配。
我尝试了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';
}
但它给了我价值是真的,而我需要的价值是假的。
答:
0赞
Nigel Ren
7/6/2023
#1
问题是您当前正在寻找是否有任何值匹配 (in_array),因此只要 1 个值匹配,就不在乎某些值不匹配。
有几种方法可以做到这一点。
首先,只需在数组上使用 foreach,并在不匹配时立即停止......
$u_in_array = true;
foreach ($my_value_is as $element) {
if ($element['price'] != $my_var) {
$u_in_array = false;
break;
}
}
if ($u_in_array) {
echo 'value is true';
} else {
echo 'value is false';
}
它看起来更长,但如果需要,可以更简单地修改。
如果要使用array_函数,可以过滤匹配的函数,然后检查结果是否为空,如果为空 - 全部匹配...
$notMatch = array_filter($my_value_is, fn($element) => $element['price'] == $my_var);
if (empty($notMatch)) {
echo 'value is true';
} else {
echo 'value is false';
}
评论
0赞
user19975737
7/7/2023
谢谢,foreach 逻辑工作正常。只是在想,如果结果是错误的,我可以再次获得具有更新值的更新数组。
0赞
nice_dev
7/6/2023
#2
您可以使用 array_diff
检查第一个数组中是否有任何值与第二个数组不同。
将只检查第一次出现,如果出现,将立即返回 true。in_array
<?php
$u_in_array = array_diff(array_unique(array_column($my_value_is , 'price')), [$my_var]);
if(empty($u_in_array)){
echo 'value is true';
}else{
echo 'value is false';
}
0赞
CBroe
7/6/2023
#3
使用 提取价格值后,您只需从中创建一个仅包含唯一值的数组即可。如果包含的元素计数正好为一,并且第一个元素与您的目标价格匹配 - 则通过检查,否则不通过。array_column
function check_all_prices($array, $targetPrice) {
$test = array_unique(array_column($array, 'price'));
return count($test) === 1 && $test[0] === $targetPrice;
}
var_dump(check_all_prices($my_value_is, $my_var));
评论
var_export()
in_array