我需要排序关联数组的前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不熟悉,这两种方法看起来都很愚蠢和多余。
答案 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++;
}