在PHP中重置/删除数组中的所有值

时间:2011-01-13 05:39:40

标签: php arrays

我有一个array_flipped数组,看起来像:

{ "a" => 0, "b" => 1, "c" => 2 }

我是否可以使用标准函数,因此它看起来像(所有值都设置为0?):

{ "a" => 0, "b" => 0, "c" => 0 }

我尝试使用foreach循环,但如果我从其他编程语言中正确记得,你应该无法通过foreach循环更改数组的值。

foreach( $poll_options as $k => $v )
  $v = 0; // doesn't seem to work...

TL;博士:如何将数组的所有值设置为0?是否有标准功能来执行此操作?

9 个答案:

答案 0 :(得分:24)

$array = array_fill_keys(array_keys($array), 0);

array_walk($array, create_function('&$a', '$a = 0;'));

答案 1 :(得分:7)

您可以使用foreach重置值;

foreach($poll_options as $k => $v) {
  $poll_options[$k] = 0;
}

答案 2 :(得分:6)

array_fill_keys函数对我来说是最容易清除数组的函数。只需使用

array_fill_keys(array_keys($array), "")

array_fill_keys(array_keys($array), whatever you want to do)

foreach可能会降低您的表现,以确保您的实际需要是哪一个。

答案 3 :(得分:5)

像这样运行你的循环,它会起作用:

foreach( $poll_options as $k => $v )
    $poll_options[$k] = 0;

此外,理想情况下,在使用foreach时,您不应该更改数组的结构,但更改值不会有任何损害。

答案 4 :(得分:4)

你必须使用&符号......

foreach( $poll_options as &$v)
  $v = 0;

或者只使用for循环。

答案 5 :(得分:4)

从PHP 5.3开始,您可以使用lambda函数,所以这是一个功能性解决方案:

$array = array_map(function($v){ return 0; }, $array);

答案 6 :(得分:3)

你可以试试这个

foreach( $poll_options as $k => &$v )
    $v = 0; 

$v

的地址

答案 7 :(得分:2)

array_combine(array_keys($array), array_fill(0, count($array), 0))

这是最不用手动的方式。

答案 8 :(得分:0)

PHP中有两种类型的变量赋值,

  1. 复制
  2. 参考
  3. 在参考作业中,($a = &$b),$ a和$ b都指的是相同的内容。 (read manual

    所以,如果你想在同一时间更改数组,就像你在foreach上做的那样,有两种方法:

    1-制作数组副本:

    foreach($array as $key=>$value){
            $array[$key] = 0 ; // reassign the array's value
    }
    

    2 - 参考:

    foreach($array as $key => &$value){
            $value = 0 ;
    }