PHP数组双位数

PHP数组双位数,php,arrays,foreach,Php,Arrays,Foreach,我有一个数组,我想将它加倍,但在执行数组后,并没有改变如何尽可能少地更正它 <?php $arr = array(1, 2, 3, 4); foreach ($arr as $value) { $value = $value * 2; } ?> 您需要将实际数组$arr元素加倍,而不仅仅是循环中的值 <?php $arr = array(1, 2, 3, 4); foreach ($arr as $key => $value) {

我有一个数组,我想将它加倍,但在执行数组后,并没有改变如何尽可能少地更正它

<?php
   $arr = array(1, 2, 3, 4);
   foreach ($arr as $value) {
     $value = $value * 2;
   }
?>

您需要将实际数组
$arr
元素加倍,而不仅仅是循环中的值

<?php
   $arr = array(1, 2, 3, 4);
   foreach ($arr as $key => $value) {
     $arr[$key] = $value * 2;
   }
?>

您的值没有翻倍,因为您不是说
$arr
中的键应该被覆盖。此代码应该工作:

$arr = array(1,2,3,4);
foreach($arr as $key => $value){
  $arr[$key] = $value*2;
}
另一种方法是使用
array\u map()


您正在使用一个变量$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 
$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);

OP最初的问题是什么?@Rizier123发现值没有加倍。是的,但是为什么OP的代码中的值没有加倍呢?OP也可以简单地通过引用循环:
foreach($arr as&$value)
我想我错过了那个,这个被弃用了,你有这个rfc链接吗?
   $arr = array(1, 2, 3, 4);
   array_walk($arr, function(&$item){ 
       $item*=2; 
   });
   var_dump($arr);