我有两个数组:
$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。
答案 0 :(得分:0)
这是一种方法。
$result = (bool) array_filter(array_map(function($a, $b){
return $b < $a;
}, $arr1, $arr2));
内部array_map
根据true
和false
的相应值的比较返回$arr1
或$arr2
。然后,外部array_filter
会将结果简化为仅包含true
值。如果true
中的所有值都大于或等于相应的$arr2
值(因为$arr1
将返回一个空数组),则将结果转换为布尔值将产生array_filter
,并且false
如果其中任何一个更少。
请记住,避免使用foreach循环 更有效。 array_map
和array_filter
函数都将迭代它们给定的整个数组。如果你使用foreach
代替,你可以在找到满足你正在寻找的条件的元素时立即退出循环,在这种情况下,这将是foreach循环的第一次迭代
答案 1 :(得分:0)
这是一个不使用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";
&#13;
答案 2 :(得分:-1)
这显示了一种思考问题的方法。 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";
}