使用阵列内的多个键过滤器查找最大值

时间:2017-06-23 09:36:58

标签: php arrays codeigniter multidimensional-array

我有脚本需要找到当月的明星表演者。

这是样本数据

 $data = array (
          [0] = array(
               "tasks_done" => 5,
                "rating" => 5),
          [1] = array(
               "tasks_done" => 4,
                "rating" => 5),
          [2] = array(
               "tasks_done" => 3,
                "rating" => 5),
          [3] = array(
               "tasks_done" => 5,
               "rating" => 5)
       );

所以问题是找到完成最大任务的人和最大评级数。这可能是使用简单的PHP代码的任何算法。

引用示例以查找数组中的最大数字:

find max() of specific multidimensional array value in php

但似乎没有任何效果。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我按第一和第二个任务评分排序。

请检查以下代码,

$data = array();
$data[0]=array("tasks_done" => 5,"rating" => 5);
$data[1]=array("tasks_done" => 4,"rating" => 5);
$data[2]=array("tasks_done" => 3,"rating" => 3);
$data[3]=array("tasks_done" => 5,"rating" => 6);
$data[4]=array("tasks_done" => 6,"rating" => 2);
$data[5]=array("tasks_done" => 3,"rating" => 6);
$temp_array = array();
$output = array();
foreach($data as $k=>$values){
    $temp_array['tasks_done'][$values['tasks_done']][$k]=$values['tasks_done'];
    $temp_array['rating'][$values['rating']][$k]=$values['rating'];
}
echo "<pre>";
print_r($data);
krsort($temp_array['tasks_done']);
krsort($temp_array['rating']);
foreach($temp_array['rating'] as $k=>$v){
    $check = checkUpper($v,$temp_array['tasks_done']);
    foreach($v as $k1=>$v1){
        $output[]=array(
            "tasks_done"=>$check[$k1],
            "rating"=>$v1
        );
    }
}
function checkUpper($array_check,$array){
    $tmp = array();
    foreach($array as $keys=>$values){
        foreach($values as $key=>$value){
            if(array_key_exists($key,$array_check)){
                $tmp[$key]=$value;
            }
        }
    }
    arsort($tmp);
    return $tmp;
}

输出,

Array
(
    [0] => Array
        (
            [tasks_done] => 5
            [rating] => 6
        )

    [1] => Array
        (
            [tasks_done] => 3
            [rating] => 6
        )

    [2] => Array
        (
            [tasks_done] => 5
            [rating] => 5
        )

    [3] => Array
        (
            [tasks_done] => 4
            [rating] => 5
        )

    [4] => Array
        (
            [tasks_done] => 3
            [rating] => 3
        )

    [5] => Array
        (
            [tasks_done] => 6
            [rating] => 2
        )

)

答案 1 :(得分:0)

我使用mysql和order by参数解决了它。谢谢大家的帮助。