0

我需要排序关联数组的前 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 新手,这两种方法似乎都是愚蠢和多余的。

4

3 回答 3

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之类的解释器中,通常最好使用内部函数而不是自己做这些事情。

于 2013-09-04T20:56:37.700 回答
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;
}
于 2013-09-04T20:56:44.263 回答
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++;
}
于 2013-09-04T20:55:03.913 回答