gpt4 book ai didi

php - 移除小于 X 的数组元素

转载 作者:可可西里 更新时间:2023-11-01 13:36:19 25 4
gpt4 key购买 nike

我有数组:

$arr1 = array(5, 3, 9, 11, 6, 15);
$arr2 = array(11, 20, 1, 3, 8);

现在我需要遍历 $arr1 并找到小于 X 的最大数字:

foreach($arr1 as $x) {
//need element that is MAX in $arr2 but is less than $x
}

例如,当 $x = 5 时,$arr2 中的最大值是 3,小于 5.

是否可以在没有嵌套循环的情况下执行此操作?我不想遍历 $arr2。我尝试使用 array_filter 但没有真正起作用。可能是我用错了。

这是我用 array_filter 尝试的:

$results = array();
foreach($arr1 as $x) {
$max = max(array_filter($arr2, function ($x) { return $x < $y; }));

$results[$x] = $max;
}

结果应该是这样的:

5  => 3, 
3 => 1,
9 => 8,
11 => 8,
6 => 3,
15 => 11

最佳答案

问题在于 lambda 的使用 - PHP 不会自动捕获封闭范围内的变量。 (官方 Anonymous Functions 在这个话题上有点稀疏,所以也请参阅 In PHP 5.3.0, what is the function "use" identifier?。)

比较原始数组,它返回一个空数组,因为它实际上是 $x < undefined

$arr2 = array(11, 20, 1, 3, 8);
$y = 5;
var_dump(array_filter($arr2, function ($x) { return $x < $y; }));

以下使用 use在函数中绑定(bind)变量的语法

$arr2 = array(11, 20, 1, 3, 8);
$y = 5;
var_dump(array_filter($arr2, function ($x) use ($y) { return $x < $y; }));

(此外,在原始代码中根本没有 $y 变量,糟糕!)

关于php - 移除小于 X 的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com