true,如果给定变量与 php 中给定数组(多维)中的所有元素/列匹配

true, if given variable is matching all element/column in given array ( Multidimensional ) in php

提问人:user19975737 提问时间:7/6/2023 最后编辑:user19975737 更新时间:7/7/2023 访问量:50

问:

数组:

$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';
 }

但它给了我价值是真的,而我需要的价值是假的。

php 变量 多维数组

评论

2赞 CBroe 7/6/2023
“下面是我的数组:” - 请不要以这种print_r输出的形式呈现示例数据 - 而是以 JSON 或 .然后,这里的每个人都有可以立即使用的代码,而不必先以代码形式重新创建数组。var_export()
2赞 Nico Haase 7/6/2023
您尝试过什么来解决问题?你被困在哪里了? 不会检查所有值是否相同,但会检查是否有任何值匹配in_array
0赞 user19975737 7/7/2023
@CBroe ,注意到。谢谢

答:

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));