我有以下php循环,它接受一个包含一组数组的数组。我使用此代码将每个数组转换为列表,因此我可以更好地操作元素。
这是我的代码......
while ($i<sizeof($my_array)){
while(list($key,$val) = each($my_array[$i])){
$j = $i+1;
if ($key == "fruit"){
$val = "ananas".$j;
echo $val;
}
}
$i++;
}
当我打印“搜索”数组(print_r($my_array))
时,值不会更改。我不明白为什么这不像我预期的那样有效。有没有一个解决方案来修改$val
而不改变循环结构和逻辑?
答案 0 :(得分:3)
使用foreach
参考:
$i = 0;
foreach ( $my_array as $key => &$val ) {
++$i;
if ($key == "fruit"){
$val = "ananas" . $i;
echo $val;
}
}
答案 1 :(得分:1)
$ val是$ my_array [$ i]中包含的数据的副本,而不是实际数据。要更改数组中的数据:
while ($i<sizeof($my_array)){
while(list($key,$val) = each($my_array[$i])){
$j = $i+1;
if ($key == "fruit"){
$my_array[$i][$key] = "ananas";
echo $my_array[$i][$key];
}
}
$i++;
}
使用foreach循环可能更容易
答案 2 :(得分:0)
each()
不会将数据作为引用传递,而不会修改那么多的循环:
if ($key == "fruit"){
$val = "ananas";
echo $val;
$my_array[$i][$key] = $val;
}
当然,有更好的方法可以做到这一点。但是你想要一个没有改变循环结构的答案。