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跳上了开往克利夫兰的失控火车。看起来是这样。哦,好吧,我想也许电子火车会把他们带回来;-)