检查两个数组是否具有相同名称的相等键值

时间:2017-07-31 18:08:19

标签: php compare

我有两个数组:

$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。

3 个答案:

答案 0 :(得分:0)

这是一种方法。

$result = (bool) array_filter(array_map(function($a, $b){
    return $b < $a;
}, $arr1, $arr2));

内部array_map根据truefalse的相应值的比较返回$arr1$arr2。然后,外部array_filter会将结果简化为仅包含true值。如果true中的所有值都大于或等于相应的$arr2值(因为$arr1将返回一个空数组),则将结果转换为布尔值将产生array_filter,并且false如果其中任何一个更少。

请记住,避免使用foreach循环 更有效。 array_maparray_filter函数都将迭代它们给定的整个数组。如果你使用foreach代替,你可以在找到满足你正在寻找的条件的元素时立即退出循环,在这种情况下,这将是foreach循环的第一次迭代

答案 1 :(得分:0)

这是一个不使用foreach()的示例,但我们大多数人都会使用迭代器来处理数组元素。您也可以使用for()或while()循环。

&#13;
&#13;
<?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;
&#13;
&#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";
}

相关问题