$vals = array(51, 23, 77, 3, 8, 31, 17, 102, 87);
arsort($vals);
从这里,我如何获得前3个值的键?如果我使用$vals[0]
,它将不起作用,因为它会返回在排序之前的原始[0]键。
我想在排序后得到102,87和77的原始键
根据您的需要,一种方法是
$keys = array_keys($vals);
$keys[0]将包含第一个键。$vals[$keys[0]]将包含第一个值。
另一种方式
$part = array_slice($vals, 0, 3, true);
$part将包含三个$key => $value对,用于前三个条目。
对于前三个键,您可以混合并匹配上述,例如:
$firstThree = array_keys(array_slice($vals, 0, 3, true));
$firstThreeKeys = array_slice(array_keys($vals), 0, 3);
echo join(', ', $firstThreeKeys);
我想我已经找到了一个方法,但可能不是最好的:
reset($arr); $key1=key($arr);
next($arr); $key2=key($arr);
next($arr); $key3=key($arr);
您可以使用array_keys()
?
或者,使用foreach
循环遍历排序数组,您仍然可以获得键:
$i = 0;
$numKeysToGet = 3;
$keys = array();
foreach ($vals as $k => $v) if ($i < $numKeysToGet) {
$keys[] = $k;
$i++;
} else break;
// $keys now contains the first three array keys
arsort保存键=>值关系,因此它通常用于关联数组(哈希)。根据您的需要,尝试对value=>key数组进行排序,而不是使用标准排序函数对key=>value进行排序。否则,您可以使用foreach循环(限制为3次迭代)来获取键。