Php 更新foreach循环中的数组值

Php 更新foreach循环中的数组值,php,foreach,Php,Foreach,我有一段代码: $start = ['23','', 'what']; foreach($start as $i){ if($i ==''){ $i = 'satisfaction'; } } print_r($start); 输出为: Array ( [0] => 23 [1] => [2] => what ) 为什么索引[1]没有被替换为“满意度”。换句话说:我不想创建一个新的数组,但要更改现有数组的索引。实际上,我试图实现的是对那些非空索引执行int

我有一段代码:

$start = ['23','', 'what'];
foreach($start as $i){
  if($i ==''){
    $i = 'satisfaction';
  }
}
print_r($start);
输出为:

Array
(
[0] => 23
[1] => 
[2] => what
)
为什么索引[1]没有被替换为“满意度”。换句话说:我不想创建一个新的数组,但要更改现有数组的索引。实际上,我试图实现的是对那些非空索引执行
intval()
(因为空索引上的intval返回0,这不是我想要的)。

因为foreach(…)充当“一点”只读迭代器。如果要修改图元,则必须通过引用访问

例如:

foreach ($start as &$i) {

}
有关更多信息,请参见以下文档:

为了能够直接修改循环中的数组元素,请在
$value
之前使用
&
。在这种情况下,将通过引用指定值

因此,在您的情况下,您应该添加
&

$start = ['23','', 'what'];
foreach($start as &$i){
               // ^ reference
    if($i === ''){
        $i = 'satisfaction';
    }
}
旁注:如果您的目的是将这些数值更改为数据类型integer,则可以使用(如您所述)
intval
或简单的类型转换

$start = ['23','', 'what'];
foreach($start as &$i){
    if(is_numeric($i)){
        $i = (int) $i;
    }
}

var_dump($start);

在您的示例中,您只是设置变量
$i
,它只是循环的临时变量。相反,将数组键保留在循环中,并使用它设置数组中的值:

$start = ['23','', 'what'];
foreach($start as $k=>$i){
  if($i ==''){
     $start[$k] = 'satisfaction';
  }
}

印刷品(一元);;并检查resulttry$start[$i]=“满意度”;这比使用参考资料要好得多。OP跳上了开往克利夫兰的失控火车。看起来是这样。哦,好吧,我想也许电子火车会把他们带回来;-)