在没有循环构造的情况下更改数组的所有值

Change all values of an array without a loop construct

提问人:Benjamin Crouzier 提问时间:10/2/2012 最后编辑:mickmackusaBenjamin Crouzier 更新时间:11/16/2023 访问量:42829

问:

我在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 数组 函数式编程 回调

评论

0赞 mario 10/2/2012
你可以使用 array_walk()。但这在内部仍然是一个循环,即使你自己没有注意到 or。forforeach

答:

63赞 Michael Berkowski 10/2/2012 #1

这是 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);
}
1赞 Teena Thomas 10/2/2012 #2
$arr = array(0, 4, 5, 7);
function val($val) { return $val+1; }
$arr = array_map( 'val' , $arr );
print_r( $arr );

在这里看到它

9赞 Rubberducker 7/27/2014 #3

是的,这可以使用 PHP 函数 array_map() 实现,如其他答案中所述。这个解决方案是完全正确和有用的。但是您应该考虑,简单的 foreach 循环会更快,占用的内存更少。此外,它还为其他程序员和用户提供了更好的可读性。几乎每个人都知道 foreach 循环在做什么以及它是如何工作的,但大多数 PHP 用户并不常见于 array_map() 函数。