PHP数组未返回预期文本:为何索引0的值是0而非'Zero'?
问题原因与解决方案
嘿,这个问题其实是个典型的代码顺序覆盖问题,很容易在写循环的时候忽略掉!
问题根源
咱们来仔细拆解第一个循环的逻辑:
for ($i = 0; $i <= 30; $i += 1) { if($i == 0) { $array[$i] = 'Zero'; // 这里先把索引0设为'Zero' } $array[$i] = $i; // 但紧接着,不管if条件是否成立,都会执行这一行! }
当$i=0时,你先通过if语句给$array[0]赋值成了'Zero',但紧接在if块外面的$array[$i] = $i会立刻覆盖掉这个值,把它重新设为0。这就是为什么最终数组索引0的值是0,而不是你预期的'Zero'。
修正方案
只需要把默认赋值的逻辑放到else分支里,让它只在$i≠0的时候执行就行:
for ($i = 0; $i <= 30; $i += 1) { if($i == 0) { $array[$i] = 'Zero'; } else { $array[$i] = $i; // 只有当i不是0时才执行这个赋值 } }
或者用更简洁的三元表达式写法,效果完全一致:
for ($i = 0; $i <= 30; $i += 1) { $array[$i] = $i == 0 ? 'Zero' : $i; }
这样修改后,第一个循环就能正确给索引0赋值为'Zero',其他索引(1到30)的值还是对应的数字,后面两个循环的逻辑也不受影响。
内容的提问来源于stack exchange,提问作者user4307026
相关产品推荐
相关产品推荐

