尝试将一个具有正数和负数组合的数组转移到一个新数组,但仅限于元素为正数的情况。
这就是我目前所拥有的:
$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的陈述有什么错误,这里有什么明智的建议吗?
try:
$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
您的函数刚刚返回第一个正值。
在foreach
循环运行所有值之后,您必须创建一个新数组,以保存所有正值并返回此数组。
function positive_function($arr) {
$result = array();
foreach ($arr as &$value) {
if($value > 0) {
$result[] = value;
}
}
return $result;
}
另一种选择是应用一个映射函数,如@Yoshi所示。这取决于您是需要保留旧数组,还是只想通过删除所有非正值来修改它。
您要查找的是数组上的筛选器(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);
--为什么你的功能不起作用:
您正在返回一个值。在函数内部,返回将停止,因为找到了答案。从而返回它在数组中找到的第一个正数。
$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;
}