У меня есть этот тестовый массив
$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
вернет value
когда условие удовлетворяет и возвращается 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);
Выход будет таким же.
Других решений пока нет …