【问题标题】:Merge subarrays to form an indexed array with first level removed [duplicate]合并子数组以形成删除第一级的索引数组[重复]
【发布时间】:2013-03-18 11:00:40
【问题描述】:

我有问题。也许解决起来很简单。

有一个如下所示的数组:

(int) 0 => array(
    (int) 0 => array(
        'Post' => array(
            'name' => 'value'
        )
    )
),
(int) 1 => array(
    (int) 0 => array(
        'Post' => array(
            'name' => 'value'
        )
    ),
    (int) 1 => array(
        'Post' => array(
            'name' => 'value'
        )
    )
)

应该是这样的:

(int) 0 => array(
        'Post' => array(
            'name' => 'value'
        )
    )
(int) 1 => array(
        'Post' => array(
            'name' => 'value'
        )
    )
(int) 2 => array(
        'Post' => array(
            'name' => 'value'
        )
    )

我尝试了array_shift(),然后直接尝试了array_values(),但这只给了我第一个帖子。

我假设顺序是“0, 0, 1”,所以 PHP 在第一个之后将其删除。

【问题讨论】:

  • 您应该澄清您的数组是否应该始终保持这种结构,或者数组的元素数量或每个数组的深度是否会发生变化。这是非常简单但严格的解决方案与稍微复杂但灵活的解决方案之间的区别。
  • 是的,它需要非常灵活。 Decezes 下面的回答非常优雅地完成了这个技巧。还是谢谢
  • 显然您需要数组数量(或原始数组大小)的灵活性,而不是数组的深度。我喜欢同样的答案。
  • @Deceze 的回答演示和来自欺骗的另一种技术:3v4l.org/IW948(此页面没有为 SO 添加新价值,可以安全地擦洗。)

标签: php arrays multidimensional-array array-merge


【解决方案1】:
$array = call_user_func_array('array_merge', $array);

【讨论】:

  • 为什么使用 call_user_func_array() 而不仅仅是 array_merge()?
  • 这实质上是$array = array_merge($array[0], $array[1], ...) 用于$array 中的任意数量的元素。
  • 哇,真是天才!在给定任意深度的情况下,该数组中的 0 到 n 个帖子是否灵活?嗯,好像是这样的:)
  • @Karl 它基本上从像您这样的数据结构中删除了数组的第一级。它不会任意合并 deep 数组(好吧,数组可以任意深,不会影响结果)。 $array 应该至少包含一个元素,否则 array_merge 会报错。
  • 不错的解决方案,利用了 array_merge 接受变量列表数组参数这一事实。
【解决方案2】:

这是我尝试过的..

      <?php
              $test = array(
                              array(array('post'=>array('name','value'))),
                              array(array('post'=>array('name','value')),array('post'=>array('name','value')),),
                           );
              print_r($test);


              $test_arr = array();

              foreach($test as $value)
              {
                 foreach($value as $subvalue)
                 {
                    $test_arr[] = $subvalue; 
                 }
              }

              print_r($test_arr);
              ?> 

【讨论】:

  • 请在这里发布代码;这个答案需要自己有用,而不是依赖于其他地方的信息。
  • @deceze 我已经编辑了答案.. 感谢您的建议
猜你喜欢
  • 2020-09-08
  • 2011-03-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多