【问题标题】:Group array by inner value in PHP在PHP中按内部值对数组进行分组
【发布时间】:2017-12-04 08:13:03
【问题描述】:

我是 PHP 的新手,我什至无法开始解决这个问题。

有这种数组:

Array (
   [0] => Array (
          [title] => "Test string"
          [lat] => "40.4211"
          [long] => "-3.70118"
          )
   [1] => Array (
          [title] => "Test string 2"
          [lat] => "10.0"
          [long] => "-23.0"
          )
   [2] => Array (
          [title] => "Test string 3"
          [lat] => "10.0"
          [long] => "-23.0"
          )
   [3] => Array (
          [cust] => "Test string 4"
          [type] => "5.0"
          [level] => "-1.34"
          )
)

我想为包含相同latlong 的数组创建一个新的内部数组。在上面的示例中,#1 和 #2 的纬度和日志相同(10.0-23.0)。

Array (
   [0] => Array (
          [title] => "Test string"
          [lat] => "40.4211"
          [long] => "-3.70118"
          )
   [1] => Array (
            [0] => Array (
                  [title] => "Test string 2"
                  [lat] => "10.0"
                  [long] => "-23.0"
                  )
            [1] => Array (
                  [title] => "Test string 3"
                  [lat] => "10.0"
                  [long] => "-23.0"
                  )
          )
   [2] => Array (
          [cust] => "Test string 4"
          [type] => "5.0"
          [level] => "-1.34"
          )
)

我怎样才能归档这个?提前致谢。

【问题讨论】:

  • 发布latlong相同的2个项目不相邻的情况的预期结果
  • 如果latlong 不相同,则不应分组。当两者相同时,必须对它们进行分组。
  • php array group的可能重复

标签: php arrays


【解决方案1】:

试试这个

    $result = [];
    foreach ($array as $vlaue) {
        $uniqueKey = $vlaue['lat'] .'_'. $vlaue['long'];
        $result[$uniqueKey][] = $value;
    }

    $result = array_values($result);

【讨论】:

  • 这仅在数组字段为 1 的情况下才有效,并且如果关键字段 lat 或 long 不存在,则不会将它们添加到数组中。
  • 其实这并不能解决他的问题。他刚刚发布了另一个问题,这里获得的结果。愚蠢的。哈哈。链接:stackoverflow.com/questions/47629400/…
【解决方案2】:

使用这个:

  $result = array();
    foreach ($yourArrayList as $data) {
        $id = $data['lat'];
        if (isset($result[$id])) {
            $result[$id][] = $data;
        } else {
            $result[$id] = array($data);
        }
    }

【讨论】:

  • 非常感谢 Andrii,但我认为您只是在比较 lat 而不是 long。当它们都相同时,我需要将它们分组。
  • @Avión 当你比较它们时,你会得到一个布尔值,然后你可以创建一个循环,利用 array_push 之类的东西来添加数组。
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多