Removing array of arrays for certain inner values

2019-09-22 09:17发布

Having this kind of array:

Array (
   [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 (
        [0] => Array (
              [title] => "Test string 6"
              [lat] => "11.1"
              [long] => "7.7"
              )
         )
)

How can I get rid of that array of arrays for all the inner arrays that have length = 1?

My desired output would be:

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 (
          [title] => "Test string 6"
          [lat] => "11.1"
          [long] => "7.7"
     )
)

Thanks in advance.

PS: I'm using PHP 5.3

标签: php arrays
3条回答
女痞
2楼-- · 2019-09-22 09:27

You can do it like below:-

foreach($array as $key=>$value){
  if(is_array($value) && count($value) ==1){
    $array[$key] = $value[0];
  }
}

Output:- https://eval.in/912263

Or you can use Passing by Reference mechanism also:-

foreach($array as &$value){
  if(is_array($value) && count($value) ==1){
    $value = $value[0];
  }
}

Output:- https://eval.in/912264

Reference:- Passing by Reference

查看更多
ら.Afraid
3楼-- · 2019-09-22 09:38

Transform each value, if it has length 1 return its first child, else return the entire thing unchanged:

$arr = array_map(function ($a) { return count($a) == 1 ? $a[0] : $a; }, $arr);
查看更多
神经病院院长
4楼-- · 2019-09-22 09:54

Assuming 2D arrays remain as is

foreach ($array as $key => $value) {      // Loop to result array
    if (count($value) <= 1) {           // Checks if array count is less than or equal to 1
        $array[$key] = reset($value);  // Reset to reduce from 2d array to 1d
    }
}

print_r($array);
查看更多
登录 后发表回答