【问题标题】:Combine Arrays into One Multidimensional Array using PHP使用 PHP 将数组组合成一个多维数组
【发布时间】:2016-12-09 03:34:17
【问题描述】:

我正在尝试将数组组合成一个单一的多维数组。可能有超过 5 个数组需要组合,所以我需要一个代码来自动组合所有数组,无论它们有多少。我试过array_merge,但它需要以逗号格式的参数手动定义数组。

要转换的代码是:

Array
(
    [id] => 1
    [name] => Item 1
    [slug] => item-slug-1
    [parent] => 0
)
Array
(
    [id] => 2
    [name] => Item 2
    [slug] => item-slug-2
    [parent] => 1
)
Array
(
    [id] => 3
    [name] => Item 3
    [slug] => item-slug-3
    [parent] => 2
)
Array
(
    [id] => 4
    [name] => Item 4
    [slug] => item-slug-4
    [parent] => 3
)
Array
(
    [id] => 5
    [name] => Item 5
    [slug] => item-slug-5
    [parent] => 3
)

这就是我想要的样子:

Array
(
    [0] => Array
        {
            [id] => 1
            [name] => Item 1
            [slug] => item-slug-1
            [parent] => 0
        }

    [1] => Array
        {
            [id] => 2
            [name] => Item 2
            [slug] => item-slug-2
            [parent] => 1
        }

    [2] => Array
        {
            [id] => 3
            [name] => Item 3
            [slug] => item-slug-3
            [parent] => 2
        }

    [3] => Array
        {
            [id] => 4
            [name] => Item 4
            [slug] => item-slug-4
            [parent] => 3
        }

    [4] => Array
        {
            [id] => 5
            [name] => Item 5
            [slug] => item-slug-5
            [parent] => 3
        }
)

数组的生成方式如下:

  1. 我收到来自服务器的响应 JSON,如下所示:

    [{"slug":"item-slug-1","name":"Item 1","id":1},{"slug":"item-slug-2","name":"Item 2","id":2},{"slug":"item-slug-3","name":"Item 3","id":3,"children":[{"slug":"item-slug-4","name":"Item 4","id":4},{slug":"item-slug-5","name":"Item 5","id":5}]}]

  2. 我对 JSON 进行解码,然后将其转换为这样的数组:

    $categories_obj = json_decode( $_POST['order'] ); $categories_arr = json_decode(json_encode( $categories_obj ), true);

  3. 我创建了一个遍历每个项目的函数,以便更容易插入到我的数据库中:

    function walk_and_update($data, $parent = 0, $count = 0) {
    
      if( is_array($data) ) {
        $combine = array();
        /* The arrays are generated here */
         foreach( $data as $key => $row ) {
            $formatted = array(
                'id'        =>  $row['id'],
                'name'      =>  $row['name'],
                'slug'      =>  $row['slug'],
                'parent'    =>  $parent
            );
    
            print_r( $formatted );
    
             /* My SQL update is here */
    
            if( isset( $row['children'] ) ) {
                walk_and_update( $row['children'], $row['id'], $count );
            }
        }
    }
    

    }

  4. 然后我使用这样的函数:

    walk_and_update( $categories_arr );

【问题讨论】:

  • 你尝试了什么?显示您的代码。
  • 如果你仔细阅读,我提到过尝试array_merge。您还需要查看代码吗?
  • array_merge 无法帮助您获得预期的输出。看看我的回答。
  • $categories_arr = json_decode(json_encode( $categories_obj ), true);的目的是什么?
  • 它将所有对象转换为数组。这可能看起来很奇怪,但它确实有效。

标签: php arrays multidimensional-array


【解决方案1】:

像这样:

$arr1 = Array(
    'id' => 1,
    'name' => 'Item 1',
    'slug' => 'item-slug-1',
    'parent' => 0);

$arr2 = Array(
    'id' => 2,
    'name' => 'Item 2',
    'slug' => 'item-slug-2',
    'parent' => 1);
$arr3 = Array(
    'id' => 3,
    'name' => 'Item 3',
    'slug' => 'item-slug-3',
    'parent' => 2);
$new_arr = array();    
for($i=1;$i<=3;$i++) {
    $var_name = 'arr'.$i;
    array_push($new_arr,$$var_name);
}    
echo "<pre>";print_r($new_arr);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Item 1
            [slug] => item-slug-1
            [parent] => 0
        )

    [1] => Array
        (
            [id] => 2
            [name] => Item 2
            [slug] => item-slug-2
            [parent] => 1
        )

    [2] => Array
        (
            [id] => 3
            [name] => Item 3
            [slug] => item-slug-3
            [parent] => 2
        )

)

【讨论】:

  • 您的代码只能处理 3 个项目。如果数组的数量增加,我将不得不不时更新您的代码。正如我在上面的问题中所说的那样:我需要一个能够自动组合所有数组的代码,无论它们有多少。
  • 这就是为什么我问你的代码,看看你是如何构造一维数组的。
  • 在 print_r($formatted) 之前或之后放置 array_push($combine,$formatted); print_r($combine); 行;声明。
【解决方案2】:

您可以创建函数来处理数组,然后将预期的数组返回到多维数组。

我能先知道,你要合并的数组,是一个一个生成还是一次生成多个数组?

//you could do this if your array produces one time only
$counter = 0;
$new_array=array();
foreach (your array as $key => $val)
{
   $new_array[$counter]['id']= $val['id'];
   $new_array[$counter]['name']= $val['name'];
   $new_array[$counter]['slug']= $val['slug'];
   $new_array[$counter]['parent'] = $val['parent'];
   $counter++;
}



//if your array produces more than one time
function main ()
{
$data['counter']=0;
$data['newarray']=array();

$data = $this->mergin_array(your array,$data['counter'])

}

function merging_array(your array,$counter)
{
   $data = array();
   $counter_new = $counter;
   foreach(your array as $key => $val)
   {
      $data['newarray'][$counter]['id'] = $val['id'];
      $data['newarray'][$counter]['name'] = $val['name'];
      $data['newarray'][$counter]['slug'] = $val['slug'];
      $data['newarray'][$counter]['parent'] = $val['parent'];
      $counter_new++;
   }
   $data['counter'] = $counter_new;

   return $data;

}

所以无论你使用多少,当你在你的 main 函数中访问 $data['newarray'] 时,它会给你组合多个数组

【讨论】:

  • 嗨,我更新了我的问题。我添加了有关如何生成数组的详细信息。如有必要,请更新您的代码。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多