【问题标题】:Removing array of arrays for certain inner values in PHP在 PHP 中删除某些内部值的数组数组
【发布时间】:2018-05-17 16:25:48
【问题描述】:

有这种数组:

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

对于所有长度 = 1 的内部数组,我怎样才能摆脱 数组数组?

我想要的输出是:

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

提前致谢。

PS:我使用的是 PHP 5.3

【问题讨论】:

  • 为什么你接受了一个没有把你带到你想要的地方的答案? stackoverflow.com/questions/47629049/…,你为什么不在这个问题中包括这个。你有一个数组,你要求一种改变它的方法,然后你问如何改变改变的数组。做正确的开始而不是更改已经更改的数组不是更好吗?

标签: php arrays


【解决方案1】:

转换每个值,如果它的长度为 1,则返回它的第一个孩子,否则返回整个事物不变:

$arr = array_map(function ($a) { return count($a) == 1 ? $a[0] : $a; }, $arr);

【讨论】:

  • 这在 PHP 5.3 中有效吗?我收到了syntax error, unexpected T_FUNCTION, expecting ')'
  • Sure. 自 PHP 5.3 起就支持匿名函数。
  • 很奇怪,我在使用 5.3.6 时遇到了这个错误
【解决方案2】:

你可以这样做:-

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

输出:- https://eval.in/912263

或者你也可以使用Passing by Reference机制:-

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

输出:- https://eval.in/912264

参考:-Passing by Reference

【讨论】:

    【解决方案3】:

    假设二维数组保持原样

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

    【讨论】:

    • 我认为这不起作用,我只得到一个结果而不是整个数组。
    • 编辑了一些错字。您可以立即查看
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多