PHP相当于Python的enumerate()?

dav*_*gan 12 php python iteration

在Python中我可以写:

for i, val in enumerate(lst):
    print i, val
Run Code Online (Sandbox Code Playgroud)

我知道如何在PHP中执行此操作的唯一方法是:

for($i = 0; $i < count(lst); $i++){
    echo "$i $val\n";
}
Run Code Online (Sandbox Code Playgroud)

PHP中有更清洁的方法吗?

Tom*_*cki 26

不要相信PHP数组,它们就像Python dicts.如果您想要安全代码,请考虑以

<?php
$lst = array('a', 'b', 'c');

// Removed a value to prove that keys are preserved
unset($lst[1]);

// So this wont work
foreach ($lst as $i => $val) {
        echo "$i $val \n";
}

echo "\n";

// Use array_values to reset the keys instead
foreach (array_values($lst) as $i => $val) {
        echo "$i $val \n";
}
?>
Run Code Online (Sandbox Code Playgroud)

-

0 a 
2 c 

0 a 
1 c 
Run Code Online (Sandbox Code Playgroud)

  • +1:使用`array_values`的第二个例子基本上是'enumerate`所做的(当然`enumerate`也接受迭代器,所以你需要更多的代码来处理这种情况)...... (2认同)

Cro*_*zin 11

用途foreach:

foreach ($lst as $i => $val) {
    echo $i, $val;
}
Run Code Online (Sandbox Code Playgroud)

  • @ircmaxell:Python的`enumerate()`从起始值(默认为"0")到"#listElements"计数.另一方面,您只是输出数组的键.如果数组是关联的,那么它不等同于`enumerate()`函数.见Tomasz的回答. (3认同)
  • 仅当数组不关联和/或键是连续的时才有效。 (2认同)