PHP的键排序问题


PHP arsort issue with keys

$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次迭代)来获取键。