无需循环构造即可更改数组的所有值

问题描述 投票:0回答:3

我在 php 中有以下数组:

$a = [0, 4, 5, 7];

我想增加所有值而不编写循环(for,foreach ...)

// increment all values
// $a is now array(1, 5, 6, 8)

在php中可以吗?

通过扩展,是否可以在每个元素上调用函数并用函数的返回值替换该元素?

例如:

$a = doubleValues($a); // array(0, 8, 10, 14)
php arrays functional-programming callback
3个回答
63
投票

这是

array_map()
的工作(将在内部循环):

$a = array(0, 4, 5, 7);
// PHP 5.3+ anonmymous function.
$output = array_map(function($val) { return $val+1; }, $a);

print_r($output);
Array
(
    [0] => 1
    [1] => 5
    [2] => 6
    [3] => 8
)

OP编辑:

function doubleValues($a) {
  return array_map(function($val) { return $val * 2; }, $a);
}

9
投票

是的,可以使用 PHP 函数 array_map(),如其他答案中所述。这个解决方案是完全正确且有用的。但您应该考虑到,一个简单的 foreach 循环会更快并且内存消耗更少。此外,它为其他程序员和用户提供了更好的可读性。几乎每个人都知道 foreach 循环的用途及其工作原理,但大多数 PHP 用户并不熟悉 array_map() 函数。


1
投票
$arr = array(0, 4, 5, 7);
function val($val) { return $val+1; }
$arr = array_map( 'val' , $arr );
print_r( $arr );

查看这里

© www.soinside.com 2019 - 2024. All rights reserved.