【问题标题】:Finding max with multiple key filter inside an array在数组内使用多个键过滤器查找最大值
【发布时间】:2017-06-23 09:36:57
【问题描述】:

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

这是样本数据

 $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

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

【问题讨论】:

  • 你能把你的问题说清楚吗?
  • 比较时哪个更重???或者您想单独查找最大值?
  • @KrisRoofe 用两个过滤器 findmax(task_done) 和 findmax(rating) 分别找到 max,它们必须输出一个结果
  • max(array_column($array, 'tasks_done'))
  • 努力尝试一下。只是来这里等待代码是一种糟糕的方法。

标签: php arrays codeigniter multidimensional-array


【解决方案1】:

我已经按照第一个和第二个tasks_done的评分排序。

请检查以下代码,

$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
        )

)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多