gpt4 book ai didi

php - php代码中的循环错误

转载 作者:行者123 更新时间:2023-12-03 23:06:44 25 4
gpt4 key购买 nike

这是我的代码,它没有删除 $arr[5] 元素,因此我尝试从数组中删除以 # 开头的字符串

这是代码

<?php
$arr = [
'#EXTM3U',
'#EXTINF:177,Paul Dateh & Oren Yoel - Be More',
'Be More.mp3',
'#EXTINF:291,Christopher Toy - Just Because',
'Just Because.mp3',
'#EXTINF:238,Magnetic North - Drift Away',
'Drift Away.mp3'
];
for ($i = 0; $i <= count($arr); $i++) {
if ($arr[$i]{0} == '#') {
echo $arr[$i] . "\n";
unset($arr[$i]);
}
}
print_r($arr);
?>

最佳答案

原因:- 您正在循环内计算数组长度,并且每次当任何值从数组中获取 unset() 时,长度数组的数量减少,count($array) 的值发生变化(简单地减少)

因此从逻辑上讲,您的第五个和第六个元素永远不会经过 if 条件(由于数组长度减少,它们永远不会被循环遍历)

解决方案 1:- 将 count 放在外面,它将正常工作:-

$count = count($arr);

//loop start from 0 so use < only otherwise, sometime you will get an undefined index error

for ($i = 0; $i < $count; $i++) {
if ($arr[$i]{0} == '#') {
//echo $arr[$i] . "\n";
unset($arr[$i]);
}
}
print_r($arr);

输出:- https://eval.in/996494

解决方案 2:- 这就是为什么我更喜欢 foreach() 而不是 for() 循环

 foreach($arr as $key=> $ar){
if ($ar[0] == '#') {
unset($arr[$key]);
}
}
print_r($arr);

输出:- https://eval.in/996502

关于php - php代码中的循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50073372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com