【问题标题】:Merging PHP arrays with different keys合并具有不同键的 PHP 数组
【发布时间】:2016-06-09 18:50:57
【问题描述】:

我想合并两个数组。

第一个看起来像这样:

 array(28) {
  [0]=>
  array(17) {
    ["category_id"]=>
    string(2) "11"
    ["image"]=>
    string(27) "718426050751.jpg"
    ["parent_id"]=>
    string(1) "1"
    ["top"]=>
    string(1) "0"
    ["column"]=>
    string(1) "1"
    ["sort_order"]=>
    string(2) "21"
    ["status"]=>
    string(1) "1"
    ["date_added"]=>
    string(19) "2015-07-30 14:06:42"
    ["date_modified"]=>
    string(19) "2016-01-05 12:21:32"
    ["language_id"]=>
    string(1) "1"
    ["name"]=>
    string(7) "Faucets"
    ["description"]=>
    string(0) ""
    ["meta_description"]=>
    string(0) ""
    ["meta_keyword"]=>
    string(0) ""
    ["store_id"]=>
    string(1) "1"
    ["product_count"]=>
    string(1) "0"
    ["page_count"]=>
    string(1) "0"
  }

第二个看起来像这样:

array(17) {
  ["category_id"]=>
  string(2) "13"
  ["image"]=>
  string(28) "4005176268779.jpg"
  ["parent_id"]=>
  string(2) "11"
  ["top"]=>
  string(1) "0"
  ["column"]=>
  string(1) "1"
  ["sort_order"]=>
  string(1) "2"
  ["status"]=>
  string(1) "1"
  ["date_added"]=>
  string(19) "2015-07-30 14:06:43"
  ["date_modified"]=>
  string(19) "2016-01-07 14:10:53"
  ["language_id"]=>
  string(1) "1"
  ["name"]=>
  string(12) "Sink Faucets"
  ["description"]=>
  string(0) ""
  ["meta_description"]=>
  string(0) ""
  ["meta_keyword"]=>
  string(0) ""
  ["store_id"]=>
  string(1) "1"
  ["product_count"]=>
  string(1) "0"
  ["page_count"]=>
  string(1) "0"
}

如您所见,第二个没有像第一个那样的键,即 [0]。

当我使用时:

$children = array_merge((array)$children, (array)$additional);

我得到了一个合并数组,但附加数组没有得到一个键,对我来说最好是最后一个数组键的 [1] 或 +1。

可以这样做吗?

谢谢

【问题讨论】:

  • 假设 $children 是第一个数组,为什么不在数组合并中使用 $children[0] 呢?类似$children[0] = array_merge($children[0], $additional);
  • 你需要array_merge吗? $children[] = $additional 应该可以工作
  • 我们需要所有这些数据来理解您的问题吗?你能保持更简单吗?否则你会失去很多可以帮助你的人:(
  • 加文,这行得通。谢谢!你能发布一个答案,所以我可以给你信用吗? Halayem,我永远无法在此处正确发布问题。要么我提供的信息太多,要么不够。每个人都那么挑剔,我不能让他们都开心。

标签: php arrays merge array-merge


【解决方案1】:
$array = [
    "0" => ["key1"=>"val1", "key2"=>"val2"]
    ];

$merge =  ["key1"=>"val3", "key2"=>"val4"];

array_merge($array, [$merge]);

结果:

Array
(
    [0] => Array
        (
            [key1] => val1
            [key2] => val2
        )

    [1] => Array
        (
            [key1] => val3
            [key2] => val4
        )

)

http://sandbox.onlinephpfunctions.com/code/a2e7abb2d9580b5f487d56b99a782505633c840b

【讨论】:

    【解决方案2】:

    array_merge() 不是必需的,您只需将第二个数组推入第一个数组即可。 $a[]=$b; 会将$b 的数据添加到$a 并分配一个自动递增的键,而无需调用函数。

    代码:

    $a=[
        0=>[
            "category_id"=>"11",
            "image"=>"718426050751.jpg",
            "parent_id"=>"1",
            "top"=>"0",
            "column"=>"1",
            "sort_order"=>"21",
            "status"=>"1",
            "date_added"=>"2015-07-30 14:06:42",
            "date_modified"=>"2016-01-05 12:21:32",
            "language_id"=>"1",
            "name"=>"Faucets",
            "description"=>"",
            "meta_description"=>"",
            "meta_keyword"=>"",
            "store_id"=>"1",
            "product_count"=>"0",
            "page_count"=>"0"
        ]
    ];
    $b=[
        "category_id"=>"13",
        "image"=>"4005176268779.jpg",
        "parent_id"=>"11",
        "top"=>"0",
        "column"=>"1",
        "sort_order"=>"2",
        "status"=>"1",
        "date_added"=>"2015-07-30 14:06:43",
        "date_modified"=>"2016-01-07 14:10:53",
        "language_id"=>"1",
        "name"=>"Sink Faucets",
        "description"=>"",
        "meta_description"=>"",
        "meta_keyword"=>"",
        "store_id"=>"1",
        "product_count"=>"0",
        "page_count"=>"0"
    ];
    $a[]=$b;  // push, not merge
    var_export($a);
    

    输出:

    array (
      0 => 
      array (
        'category_id' => '11',
        'image' => '718426050751.jpg',
        'parent_id' => '1',
        'top' => '0',
        'column' => '1',
        'sort_order' => '21',
        'status' => '1',
        'date_added' => '2015-07-30 14:06:42',
        'date_modified' => '2016-01-05 12:21:32',
        'language_id' => '1',
        'name' => 'Faucets',
        'description' => '',
        'meta_description' => '',
        'meta_keyword' => '',
        'store_id' => '1',
        'product_count' => '0',
        'page_count' => '0',
      ),
      1 => 
      array (
        'category_id' => '13',
        'image' => '4005176268779.jpg',
        'parent_id' => '11',
        'top' => '0',
        'column' => '1',
        'sort_order' => '2',
        'status' => '1',
        'date_added' => '2015-07-30 14:06:43',
        'date_modified' => '2016-01-07 14:10:53',
        'language_id' => '1',
        'name' => 'Sink Faucets',
        'description' => '',
        'meta_description' => '',
        'meta_keyword' => '',
        'store_id' => '1',
        'product_count' => '0',
        'page_count' => '0',
      ),
    )
    

    【讨论】:

    • @smack-a-bro 您的问题似乎已被放弃,这对未来的 SO 研究人员来说是一条死胡同。由于加文没有发布答案供您接受,因此我发布了一些内容,以便您的问题可以结束。
    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2021-12-09
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多