3 回答

TA貢獻1936條經驗 獲得超7個贊
為什么它表現得像這樣
博士:由于新創建的數組的第一個元素 is 和 賦值運算符返回分配給變量的值,這會導致表達式計算為 ,因此 while-loop 的主體永遠不會運行。0false
運行 for 循環后,接收到的數組將為 。[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
首先,調用 將返回新創建的數組的第一個元素,即 ,然后賦值運算符將返回分配給變量的值,即 。然后,代碼將是:current($ages)0=$age0
while(0) {
echo $age . ", ";
next($ages);
}
0被評估為假,這就是為什么循環的主體永遠不會運行的原因。因此,沒有輸出到屏幕。

TA貢獻1883條經驗 獲得超3個贊
您需要檢查 的結果是否與布爾值不同(意味著游標未找到該元素),而不僅僅是分配其值。當值為 時,你會得到 ,這會破壞循環。current()false0while(0)
$ages = [];
for($i = 0; $i < 10; $i++) {
$ages[] = $i;
}
while($age = current($ages) !== false) {
echo $age . ", ";
next($ages);
}
https://3v4l.org/61WoL
但是,如果數組中的任何元素具有布爾值,這將失敗。因此,根本不建議像這樣循環訪問數組,而應該使用正確的工具,使用循環。這實際上不會移動光標,但您可以通過調用每次迭代來“使其”移動光標。falseforeachnext()
$ages = [];
for($i = 0; $i < 10; $i++) {
$ages[] = $i;
}
foreach ($ages as $age) {
echo current($ages).", ";
next($ages);
}
如果您只想打印值,最好的方法是直接從循環打印,或者使用 .foreachimplode()
foreach ($ages as $age) {
echo $age.", ";
}
或
echo impolode(",", $ages);

TA貢獻1831條經驗 獲得超9個贊
首先,你的php代碼的語法是錯誤的:
將第 5 行替換為while($age == current($ages)) {
你用的不是用來比較的,而是用來比較的。嘗試這樣做,然后看看。===
此外,你可以用一種更簡單的方式做到這一點:
foreach($ages as $age) {
echo "$age, ";
}
- 3 回答
- 0 關注
- 78 瀏覽
添加回答
舉報