1

试图将一个包含正数和负数组合的数组转移到一个新数组 - 但仅限于元素为正数的地方。

这是我到目前为止所拥有的:

$param = array(2, 3, 4, -2, -3, -5);

function positive_function($arr) {
    foreach ($arr as &$value) {
        if($value > 0)
            return $value;
    }
}

$modParam1 = positive_function($param);

var_dump($modParam1);

我认为我的 foreach 语句有问题,这里有什么明智的建议吗?

4

4 回答 4

16

尝试:

$param = array(2, 3, 4, -2, -3, -5);

$positive = array_filter($param, function ($v) {
  return $v > 0;
});

print_r($positive);

http://codepad.viper-7.com/eKj7pF

于 2012-07-19T16:03:52.800 回答
1

您正在寻找的是阵列上的过滤器(http://www.php.net/manual/en/function.array-filter.php

这将删除数组中不能满足您需求的值。一个基本的例子是:

function is_positive($number) {
  return is_numeric($number) && $number >= 0;
}

$values = array(1, 5, -4, 2, -1);
$result = array_filter($values, 'is_positive');
print_r($result);

-- 为什么你的函数不起作用:

您正在返回一个值。在函数内部,返回将停止,因为找到了答案。因此返回它在数组中找到的第一个正数。

于 2012-07-19T16:10:48.400 回答
1

您的函数刚刚返回第一个正值。

foreach在循环遍历所有值之后,您必须创建一个新数组来保存所有正值并返回该数组。

function positive_function($arr) {
    $result = array();

    foreach ($arr as &$value) {
        if($value > 0) {
          $result[] = value;
        }
    }

    return $result;
}

另一种选择是应用@Yoshi 所示的映射功能。这取决于您是需要保留旧数组还是只想通过删除所有非正值来修改它。

于 2012-07-19T16:03:54.777 回答
0
$param = array(-1,2-,3,1,2,4,-1337);
function positive_function($arr)
{
    $temp = array();
    foreach ($arr as &$value) 
    {
        if($value > 0)
        {
            $temp[] = $value
        }
    }
       return $temp;
}   
于 2012-07-19T16:06:24.830 回答