Search code examples
phparraysmultidimensional-arraygroupingsub-array

Group 2d array data by a column and only create a subarray if more than one item in group


Having this kind of array:

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

I would like to create a new inner array for the ones that contains the same lat and long. In the example above the ones of #1 and #2 have the same lat and log (10.0 and -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"
          )
)

How can I archieve this?


Solution

  • Try this

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