在阵列中抓取前10个元素的速度更快/效率更高

时间:2013-09-04 20:48:43

标签: php

我需要排序关联数组的前10个元素的键,值和索引。

$top10pts = array_slice($toppoints, 0, 10);
foreach ($top10pts as $key => $val) {
    echo "<tr><td>".(array_search($key, array_keys($top10pts))+1)."</td><td>".htmlentities($key)."</td><td>".$val."</td></tr>";
}

for ($i=0; $i<10; $i++) {
    $val = array_slice($toppoints, $i, 1);
    echo "<tr><td>".($i+1)."</td><td>".htmlentities(key($val))."</td><td>".$val[key($val)]."</td></tr>";
}

或其他方法?

对PHP不熟悉,这两种方法看起来都很愚蠢和多余。

3 个答案:

答案 0 :(得分:3)

这是我想到的最佳方法。

$top10pts = array_slice($toppoints, 0, 10);
$i = 1;
foreach ($top10pts as $key => $val)
    echo "<tr><td>".($i++)."</td><td>".htmlentities($key)."</td><td>".$val."</td></tr>";

请注意,对于超过10个项目,此方法效果更好,因为它在循环中没有条件。在诸如 php 之类的解释器中,通常最好使用内部函数而不是自己做这些事情。

答案 1 :(得分:3)

与ernie的回答相似,但你根本不需要数组切片

$index = 0;
foreach ($top10pts as $key => $val) {
    echo "<tr><td>".$index++."</td><td>".htmlentities($key)."</td><td>".$val."</td></tr>";
    if($index >=10) break;
}

答案 2 :(得分:2)

由于你已经排序了,foreach会按顺序迭代,所以我会使用你的第一个修改,摆脱array_search :. 。 。

$index = 0;
$top10pts = array_slice($toppoints, 0, 10);
foreach ($top10pts as $key => $val) {
    echo "<tr><td>".$index."</td><td>".htmlentities($key)."</td><td>".$val."</td></tr>";
    $index++;
}