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



我有两个数组:

$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对应值的比较返回truefalse。然后,外部array_filter将结果减少为仅包含true值。如果$arr2中的所有值都大于或等于相应的$arr1值(因为array_filter将返回一个空数组(,则将结果转换为布尔值将产生true,如果其中任何一个值小于false

请记住,对于这样的事情,避免 foreach 循环并不更有效。array_maparray_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";
}

相关内容

  • 没有找到相关文章

最新更新