使用 array_map php 查找数组中的所有负数

find all the negative numbers in the array using array_map php

我有这个测试数组

$test = array(-10,20,40,-30,50,-60);

我希望输出为

$out = array (-10, -30, -60);

这是我的解决方案:

$temp = array();

function neg($x)
{
    if ($x <0) 
    {
        $temp[] = $x; 
        return $x;
    }
}
$negative = array_map("neg", $test);

当我打印 $negative 时,我得到了我想要的,但有些条目为空。我可以在回调函数中做些什么来不记录空条目吗?

Array
(
    [0] => -10
    [1] => 
    [2] => 
    [3] => -30
    [4] => 
    [5] => -60
)
1

当我打印 $temp 数组时,我以为我会得到我的答案,但它打印了一个空数组。我不明白为什么,我正在清除将 $x 添加到回调函数中的 $temp[] 数组。有什么想法吗?

print_r($temp);
// outputs
Array
(
)
1

array_map 将 return 当条件满足时 value 和 return NULL 如果条件不满足。在这种情况下,您可以使用 array_filter.

$test = array(-10,20,40,-30,50,-60);

$neg = array_filter($test, function($x) {
    return $x < 0;
});

输出

array(3) {
  [0]=>
  int(-10)
  [3]=>
  int(-30)
  [5]=>
  int(-60)
}

如果您继续使用 array_map 那么我建议在完成后应用 array_filter 一次 -

$negative = array_map("neg", $test);
$negative = array_filter($negative);

输出相同。