如果我有一些代码:
foreach(array_keys($array) as $key)
{
// work with the array
}
我有两个问题
答案 0 :(得分:1)
1。)如果在每次迭代中都会评估array_keys($array)
,那么我不会想到,您可能会记住上一次的位置,因为{{1每次都会返回一个带有键的新数组,加上它在性能方面会非常糟糕,所以没有。这适用于所有表达式,它们评估为某种形式的可迭代,并且位于array_keys()
的第一部分。
2。)如果你对整个数组进行迭代,那么会发生以下情况:
a) foreach
首先从数组中提取所有键,这是array_keys()
和List
的混合(如果您熟悉的话)使用java或一些强类型的oo语言),它可能非常快或非常慢,具体取决于数组内部结构和Hashmap
方法的实现。然后,如果迭代数组,则需要在每次迭代中进行查找,例如array_keys
,这也需要一些时间,尤其是字符串键。
b) $value = $array[$currentlyIteratedKey];
循环是一种语言构造(可能更好地优化),并且没有额外的查找,您在每次迭代中都获得了密钥和值,所以我认为它会更快。
希望它有所帮助,如果我错了,请纠正我!
答案 1 :(得分:-1)
1 - 使用所有阵列时速度更快 2 - 当需要“找到”某个键并中断
时更快