найти все отрицательные числа в массиве, используя array_map Stack Overflow

У меня есть этот тестовый массив

$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

2

Решение

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);

Выход будет таким же.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]