首页 > 解决方案 > 如何在php多维数组中获得最高分

问题描述

我有以下数组

$usersAttemptsInfo = [
    "1" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 2],
    "2" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 4],
    "3" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5],
    "4" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 3],
    "5" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5],
    "6" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 2],
    "7" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 3]
];

我想找出谁是最高分,假设两个人获得相同的分数,我需要这两个值。

预期输出

$expected = [
"3" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5],
"5" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5]
];

5是最高分,所以我期待这个答案。

my code
    $higiestScore = max(array_column($usersAttemptsInfo, 'totalCorrectQuestion'));

但它只返回一个分数。

标签: arraysmultidimensional-arraymax

解决方案


max()函数只会返回一个值,结果没有问题。totalCorrectQuestion 相反,您可以在完成 max 函数后尝试使用 过滤数组以获取具有相同值的另一个数组。

更新:你可以试试这个

<?php
$usersAttemptsInfo = [
    "1" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 2],
    "2" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 4],
    "3" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5],
    "4" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 3],
    "5" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 5],
    "6" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 2],
    "7" => ["totalQuesAttempted" => 10, "totalCorrectQuestion" => 3]
];


$highestscore = max(array_column($usersAttemptsInfo, 'totalCorrectQuestion'));

$results = array_filter($usersAttemptsInfo, 
               function ($item) {
                                global $highestscore;
                                if($item["totalCorrectQuestion"] == $highestscore) return $item;
                              });

var_dump($results);

?>

推荐阅读