【问题标题】:How to get first n keys in associative array in PHP?如何在 PHP 中获取关联数组中的前 n 个键?
【发布时间】:2016-03-16 22:19:06
【问题描述】:

我有一个数组,用于存储一个人在几个不同科目中的分数,例如:

$scores = array(
    'reading' => 80,
    'math' => 85, 
    'science' => 75, 
    'social studies'=> 90, 
    'music' => 95);

我需要以字符串形式获取前 3 个主题(键)的列表:

$topScores = "Music, Social Studies, Math";

什么是干净有效的方法?

【问题讨论】:

  • 对数组进行排序,得到数组的key,然后是前3个。

标签: php arrays sorting associative-array


【解决方案1】:

以相反的顺序对数组进行排序,保持与 arsort() 的关联。然后取数组的一个切片(前三个元素)。

arsort( $scores );
$topScores = array_slice( $scores, 0, 3 );

然后您可以使用 implode 从切片数组生成字符串。


Rizier123 指出您想要字符串中的键,因此您需要内爆键。类似的东西

$topScoresStr = implode( ', ', array_keys( $topScores ) );

【讨论】:

  • 作为单行符不太适用:1) arsort 返回一个布尔值;) 2) OP 想要密钥
  • @Rizier123,是的,我只是查看它以验证它是否是参考。
  • $scores = array_slices(...)
  • @fusion3k: 好吧,你扭伤了我的胳膊,我来交作业:P
【解决方案2】:

这是我带来的东西:

arsort($scores);
$scores = array_slice($scores,0,3);
$finalString = null;
foreach($scores as $key => $value){
    $finalString .= ucfirst($key).', ';
}
echo $finalString;

【讨论】:

  • Implode 是比循环更好的替代方案,如果他们确实希望单词大写,他们可以使用 ucwords 调用 array_filter。 ucfirst 不适用于“社会研究”。
【解决方案3】:

这是我想出的解决方案:

$sorted = $scores;
arsort($sorted);
$top_three = array_slice(array_keys($sorted), 0, 3);
$skills = implode(', ',$top_three);
$this->top_skills = ucwords($skills);

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2015-08-05
    • 1970-01-01
    • 2013-02-17
    • 2011-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多