【问题标题】:PHP for not loop for all valuesPHP for not 循环所有值
【发布时间】:2016-11-04 13:16:44
【问题描述】:

我有这个代码sn-p:

var_dump(count($xml)); // returns 34 

for($i = 8; $i < count($xml); $i++){ 
    echo "unseting $i <br>";
    unset($xml[$i]);
}

var_dump($xml);

结果:

int 34

取消设置 8 取消设置 9 取消设置 10 取消设置 11 取消设置 12 取消设置 13 取消设置 14 取消设置 15 取消设置 16 取消设置 17 取消设置 18 取消设置 19 取消设置 20

为什么这会在 $i = 20 时被打破?

当我将 for-loop 更改为 $i = 0 - 它仍然工作异常。我只得到数字 0-16 - 总是只有一半。但是当我评论未设置的行时 - 然后它会遍历所有值..

未设置的问题在哪里?为什么取消设置打破我的一半?

【问题讨论】:

  • 因为你减少了循环中$xml 的长度
  • 哦,好吧 - 现在可以正常工作了!非常感谢!
  • 如果您对以下任何答案感到满意,您应该接受答案。对于未来有类似问题的访问者来说,找到解决问题的答案通常很有用。 i.stack.imgur.com/LkiIZ.png

标签: php for-loop unset


【解决方案1】:

您遇到这种情况是因为 unset() 破坏了指定的变量。

因此,当您遍历循环并同时使用 unset() 来从数组中删除元素,数组大小也随着从数组中删除元素而减小,

所以执行是这样的,

unseting 8 with remaining array size: 34 
unseting 9 with remaining array size: 33 
unseting 10 with remaining array size: 32 
unseting 11 with remaining array size: 31 
unseting 12 with remaining array size: 30 
unseting 13 with remaining array size: 29 
unseting 14 with remaining array size: 28 
unseting 15 with remaining array size: 27 
unseting 16 with remaining array size: 26 
unseting 17 with remaining array size: 25 
unseting 18 with remaining array size: 24 
unseting 19 with remaining array size: 23 
unseting 20 with remaining array size: 22 

演示:https://eval.in/599426

【讨论】:

    【解决方案2】:

    当您unset 时,您正在移动数组中的项目,并且随着循环的运行,数组正在缩小。以前在索引$i 上的内容,现在基本上在索引$i - 1 上。

    尝试向后运行循环,并改用$i--

    for($i = count($xml); $i > 7; $i--){ 
        echo "unseting $i <br>";
        unset($xml[$i]);
    }
    

    您还可以在循环运行之前设置长度,这样在循环期间它就不会改变,如下所示:

    $count = count($xml);
    for ($i = 8; $i < $count; $++) {
        ...
    }
    

    【讨论】:

    • $max = count($xml); for($i = 8; $i
    【解决方案3】:

    unset 从索引数组中删除元素,使count() 结果减少,影响for 循环的结束条件。

    如果您的意图是从某个索引开始删除数组元素,那么您可以使用array_splice

    array_splice($xml, 8);
    

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多