【问题标题】:Algorithm of search unique element in array?搜索数组中唯一元素的算法?
【发布时间】:2017-06-01 16:03:29
【问题描述】:

使用哪种算法来搜索数组中的唯一元素?

例如数组是:

$arr = [
   ["date" => "2015/04/05",
   "country" => "UK",
   "number" => 3],

   ["date" => "2015/04/05",
   "country" => "UK",
   "number" => 3],

   ["date" => "2015/04/05",
    "country" => "UK",
   "number" => 3],

   ["date" => "2015/04/05",
    "country" => "UK",
   "number" => 4],

];

那么,我需要用唯一的number 计算多少元素?

结果我应该得到以下结构:

["UK" => array("total" => "2")]

其中total 是数组中唯一number 的数量。

我试过了:

$output = [];

foreach ($arr as $k => $value) {

            $output[
                $value[
                    "country"
                ]][$value["date"]][$value["number"]
            ] = true;
        }

        foreach ($output as $k => $v) {

            foreach ($v as $c => $t) {

                $arr[$k][$c] = count($t);
            }
        }

但是这段代码看起来很糟糕,有循环。另外我认为有一个简单的算法可以解决这些问题。

【问题讨论】:

  • 如果代码有效,也许这更适合代码审查(?)
  • 代码有效,但我不喜欢它
  • 我投票结束这个问题作为离题,因为它更适合在另一个网站上,例如codereview.stackexchange.com

标签: php arrays algorithm


【解决方案1】:

这样的东西会给你想要的输出。

$array = [];

foreach (array_unique(array_column($arr, 'country')) as $country) {
    $filter = array_filter($arr, function ($obj) use ($country) { 
           return $obj['country'] == $country; 
    });
    $array[$country] = array("total" => count(array_unique(array_column($filter, 'number'))));
}

print_r($array);

【讨论】:

    【解决方案2】:
    $arr = [
       ["date" => "2015/04/05", "country" => "UK", "number" => 3],
       ["date" => "2015/04/05", "country" => "UK", "number" => 3],
       ["date" => "2015/04/05", "country" => "UK", "number" => 3],
       ["date" => "2015/04/05", "country" => "UK", "number" => 4],
    ];
    
    $result=array();
    foreach($arr as $value)
    {
        $result[$value["country"]][$value['number']] = 1;
    }
    
    foreach ($result as $country => $a) {
        $answer[$country]['total'] = count($a);
    }
    
    print_r($answer);
    

    结果:

    Array
    (
        [UK] => Array
            (
                [total] => 2
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      试试这个希望这会对你有所帮助。这里我们使用foreach array_uniquearray_map 来实现所需的输出。

      Try this code snippet here

      $result = array();
      foreach ($arr as $value)
      {
          $result[$value["country"]][] = $value["number"];
      }
      $result = array_map(function($value){
          return array("total"=>count(array_unique($value)));
      }, $result);
      print_r($result)
      

      【讨论】:

      • 实际上没有给出所需的答案
      猜你喜欢
      • 2012-04-28
      • 1970-01-01
      • 2016-06-02
      • 2021-06-03
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多