2011-09-14 87 views
2
$vals = array(51, 23, 77, 3, 8, 31, 17, 102, 87); 
arsort($vals); 

从这里,我如何获得3个第一个值的关键?如果我这样做$vals[0]它不会工作,因为它会在arsort之前返回原始的[0]键。PHP关键问题

我想要得到102,87和77之后的原始密钥。

回答

3

取决于你需要什么,一个办法是

$keys = array_keys($vals); 

$键[0 ]将包含第一个键。 $ vals [$ keys [0]]将包含第一个值。

的备用方法

$part = array_slice($vals, 0, 3, true); 

$部分将包含前三个项的三个$密钥=> $值对。

而对于前三个按键,你可以混合和匹配上面,如:

$firstThree = array_keys(array_slice($vals, 0, 3, true)); 
2
$firstThreeKeys = array_slice(array_keys($vals), 0, 3); 

echo join(', ', $firstThreeKeys); 
1

我想我已经找到了一种方法,也许不是然而最好的:

reset($arr); $key1=key($arr); 
next($arr); $key2=key($arr); 
next($arr); $key3=key($arr); 
0

你可以使用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 
0

arsort保存密钥=>值的关系,所以它usualy用于关联数组(散列)。为了您的需要,尝试使用standart sotring函数对value => key array进行排序,而不是您的key =>值。否则,你可以使用foreach循环(限制3次迭代)来获得密钥。