我有两个数组:
$arr1 = array(
1 => 250,
2 => 325,
3 => 741,
4 => 690
);
$arr2 = array(
1 => 110,
2 => 740,
3 => 1200,
4 => 500
);
我想检查是否所有$arr2
值都小于$arr1
值
现在有 2 个键[1] + [4]
不到$arr1
个键[1] + [4]
如果没有foreach循环,如果$arr2
中的任何键小于$arr1
的相同键,我想返回true或false。
这里有一种方法可以做到这一点。
$result = (bool) array_filter(array_map(function($a, $b){
return $b < $a;
}, $arr1, $arr2));
内部array_map
根据$arr1
和$arr2
对应值的比较返回true
或false
。然后,外部array_filter
将结果减少为仅包含true
值。如果$arr2
中的所有值都大于或等于相应的$arr1
值(因为array_filter
将返回一个空数组(,则将结果转换为布尔值将产生true
,如果其中任何一个值小于false
。
请记住,对于这样的事情,避免 foreach 循环并不更有效。array_map
和array_filter
函数都将迭代给定的整个数组。如果改用foreach
,则可以在找到满足所需条件的元素后立即脱离循环,在本例中,这将是 foreach 循环的第一次迭代。
这是一个不使用foreach((的例子,但我们大多数人会使用迭代器来处理数组元素。 您也可以使用 for(( 或 while(( 循环。
<?php // demo/temp_samer.php
/**
* Compare array elements
*
* https://stackoverflow.com/questions/45422576/check-if-two-arrays-are-equal-key-value-with-same-name
*/
error_reporting(E_ALL);
echo '<pre>';
$arr1=array('1'=>250,'2'=>325,'3'=>741,'4'=>690);
$arr2=array('1'=>110,'2'=>740,'3'=>1200,'4'=>500);
if ($arr2[1] < $arr1[1]) echo PHP_EOL . "KEY 1 IS LOWER IN THE SECOND ARRAY";
if ($arr2[2] < $arr1[2]) echo PHP_EOL . "KEY 2 IS LOWER IN THE SECOND ARRAY";
if ($arr2[3] < $arr1[3]) echo PHP_EOL . "KEY 3 IS LOWER IN THE SECOND ARRAY";
if ($arr2[4] < $arr1[4]) echo PHP_EOL . "KEY 4 IS LOWER IN THE SECOND ARRAY";
这显示了思考问题的一种方式。 https://iconoun.com/demo/temp_samer.php
<?php // demo/temp_samer.php
/**
* Compare array elements
*
* https://stackoverflow.com/questions/45422576/check-if-two-arrays-are-equal-key-value-with-same-name
*/
error_reporting(E_ALL);
echo '<pre>';
$arr1=array('1'=>250,'2'=>325,'3'=>741,'4'=>690);
$arr2=array('1'=>110,'2'=>740,'3'=>1200,'4'=>500);
foreach ($arr2 as $key => $value)
{
if ($value < $arr1[$key]) echo PHP_EOL . "KEY $key IS LOWER IN THE SECOND ARRAY";
}