php代码中的循环错误

时间:2018-04-28 05:56:50

标签: php loops

以下是我的代码,并没有删除$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); 
?>

3 个答案:

答案 0 :(得分:3)

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

所以逻辑上你的第5和第6个元素永远不会经历if条件(由于数组的长度减少,它们永远不会被循环遍历)

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

$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

答案 1 :(得分:1)

尝试使用其他数组来推送正确的值。您在每次迭代时计算String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; GlideApp .with(context) .asBitmap() .load(Uri.fromFile(new File(filePath))) .into(imageViewGifAsBitmap); ,当您执行count($arr);时,您的数组变小,count($arr);返回较小的值,因此最后的元素不会进行比较,尝试使用变量计算结果在循环之前进行更改:

count($arr);

或者在附加数组的帮助下删除坏元素,将好元素放在新数组中,不要将它们从输入数组中删除:

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

答案 2 :(得分:1)

更多空间:

for ($i = 0; $i < count($arr); $i++) {

    if (strpos($arr[$i], '#') !== false) {
     echo "<br/>";
    } else {
        echo $arr[$i]."<br/>";
    }
}