我有一个数组,我想把它翻倍,但在执行数组后不改变如何尽可能少地纠正它
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
$value = $value * 2;
}
?>
你的值没有翻倍,因为你没有说键应该在$arr
中被覆盖,这段代码应该工作:
$arr = array(1,2,3,4);
foreach($arr as $key => $value){
$arr[$key] = $value*2;
}
另一种选择是使用array_map()
。
<?php
function double($i){
return $i*2;
}
$arr = array(1, 2, 3, 4);
$arr = array_map('double', $arr);
var_dump($arr);
?>
您需要将实际的数组$arr
元素加倍,而不仅仅是循环中的值。
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $key => $value) {
$arr[$key] = $value * 2;
}
?>
你正在使用一个变量$value,它在每个for循环中赋值,所以这个值存储在$value中,在你的foreach循环中重写。你有
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
$value = $value * 2;
}
?>
这将工作
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
?>
简短的解决方案,并在< PHP 5.3
中支持,试试这个代码
<?php
$arr = array(1, 2, 3, 4);
$arr = array_map(create_function('$v', 'return $v * 2;'), $arr);
print_r($arr);
演示尝试以下代码:
$arr = array(1, 2, 3, 4);
array_walk($arr, function(&$item){
$item*=2;
});
var_dump($arr);