我有一个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?是否有标准功能来执行此操作?
答案 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中有两种类型的变量赋值,
在参考作业中,($a = &$b
),$ a和$ b都指的是相同的内容。 (read manual)
所以,如果你想在同一时间更改数组,就像你在foreach
上做的那样,有两种方法:
foreach($array as $key=>$value){
$array[$key] = 0 ; // reassign the array's value
}
foreach($array as $key => &$value){
$value = 0 ;
}