代码之家  ›  专栏  ›  技术社区  ›  Uffo

使用相同键的数组合并不覆盖

  •  1
  • Uffo  · 技术社区  · 7 年前

    我有以下两个数组,带键 2016 2017

    array(2) {
      [2016]=>
      array(11) {
        ["id"]=>
        string(1) "0"
        [0]=>
        string(1) "0"
        ["user_id"]=>
        string(1) "0"
        ["entry_id"]=>
        int(0)
        ["user_name"]=>
        string(0) ""
        [3]=>
        string(0) ""
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(0) ""
        ["created"]=>
        string(4) "2016"
        ["total"]=>
        int(0)
      }
      [2017]=>
      array(11) {
        ["id"]=>
        string(1) "0"
        [0]=>
        string(1) "0"
        ["user_id"]=>
        string(1) "0"
        ["entry_id"]=>
        int(0)
        ["user_name"]=>
        string(0) ""
        [3]=>
        string(0) ""
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(0) ""
        ["created"]=>
        string(4) "2017"
        ["total"]=>
        int(0)
      }
    }
    array(1) {
      [2017]=>
      array(30) {
        ["id"]=>
        string(2) "52"
        [0]=>
        string(2) "52"
        ["user_id"]=>
        NULL
        [1]=>
        NULL
        ["entry_id"]=>
        string(1) "2"
        [2]=>
        string(1) "2"
        ["user_name"]=>
        NULL
        [3]=>
        NULL
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(4) "null"
        [5]=>
        string(4) "null"
        ["entry_type"]=>
        string(6) "banner"
        [6]=>
        string(6) "banner"
        ["created"]=>
        string(19) "2017-06-21 10:25:49"
        [7]=>
        string(19) "2017-06-21 10:25:49"
        ["ip"]=>
        string(9) "127.0.0.1"
        [8]=>
        string(9) "127.0.0.1"
        ["user_agent"]=>
        string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        [9]=>
        string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        ["browser"]=>
        string(13) "Google Chrome"
        [10]=>
        string(13) "Google Chrome"
        ["browser_version"]=>
        string(2) "58"
        [11]=>
        string(2) "58"
        ["os"]=>
        string(28) "Mac OSX 10 (Unknown Version)"
        [12]=>
        string(28) "Mac OSX 10 (Unknown Version)"
        ["total"]=>
        string(3) "510"
        [13]=>
        string(3) "510"
        ["date_only"]=>
        string(4) "2017"
        [14]=>
        string(4) "2017"
      }
    }
    

    2016 但是我得到了一个有3个键的数组,它并没有用相同的键覆盖数组。

    $final = array_merge($results,$results_from_db);

    array(3) {
      [0]=>
      array(11) {
        ["id"]=>
        string(1) "0"
        [0]=>
        string(1) "0"
        ["user_id"]=>
        string(1) "0"
        ["entry_id"]=>
        int(0)
        ["user_name"]=>
        string(0) ""
        [3]=>
        string(0) ""
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(0) ""
        ["created"]=>
        string(4) "2016"
        ["total"]=>
        int(0)
      }
      [1]=>
      array(11) {
        ["id"]=>
        string(1) "0"
        [0]=>
        string(1) "0"
        ["user_id"]=>
        string(1) "0"
        ["entry_id"]=>
        int(0)
        ["user_name"]=>
        string(0) ""
        [3]=>
        string(0) ""
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(0) ""
        ["created"]=>
        string(4) "2017"
        ["total"]=>
        int(0)
      }
      [2]=>
      array(30) {
        ["id"]=>
        string(2) "52"
        [0]=>
        string(2) "52"
        ["user_id"]=>
        NULL
        [1]=>
        NULL
        ["entry_id"]=>
        string(1) "2"
        [2]=>
        string(1) "2"
        ["user_name"]=>
        NULL
        [3]=>
        NULL
        ["action"]=>
        string(11) "banner view"
        [4]=>
        string(11) "banner view"
        ["entry_details"]=>
        string(4) "null"
        [5]=>
        string(4) "null"
        ["entry_type"]=>
        string(6) "banner"
        [6]=>
        string(6) "banner"
        ["created"]=>
        string(19) "2017-06-21 10:25:49"
        [7]=>
        string(19) "2017-06-21 10:25:49"
        ["ip"]=>
        string(9) "127.0.0.1"
        [8]=>
        string(9) "127.0.0.1"
        ["user_agent"]=>
        string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        [9]=>
        string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        ["browser"]=>
        string(13) "Google Chrome"
        [10]=>
        string(13) "Google Chrome"
        ["browser_version"]=>
        string(2) "58"
        [11]=>
        string(2) "58"
        ["os"]=>
        string(28) "Mac OSX 10 (Unknown Version)"
        [12]=>
        string(28) "Mac OSX 10 (Unknown Version)"
        ["total"]=>
        string(3) "510"
        [13]=>
        string(3) "510"
        ["date_only"]=>
        string(4) "2017"
        [14]=>
        string(4) "2017"
      }
    }
    

    信息:PHP 5.6.30(cli)(构建时间:2017年2月7日16:18:37)版权所有(c) 1997-2016 PHP Group Zend Engine v2.6.0,版权所有(c)1998-2016 Zend Technologies公司

    2 回复  |  直到 7 年前
        1
  •  4
  •   buildok    7 年前

    带有数字键的输入数组中的值将用结果数组中从零开始的递增键重新编号。

    http://php.net/manual/en/function.array-merge.php

        2
  •  2
  •   mickmackusa Tom Green    7 年前

    array_replace() 将用第二个子阵列覆盖第一个子阵列:

    var_export(array_replace($a,$b));
    


    + ksort()

    $overwrite=$b+$a;
    ksort($overwrite);
    var_export($overwrite);
    


    demo link 您可以在其中使用两个数组变量上的函数。

    array_merge() array_merge_recursive() 将产生3个子阵列。


    即使您将键转换为字符串,如 '2017' array\u merge() 仍然将它们视为数字,并且您将得到3个子阵列。

    如果您尽可能在每个键前加前缀 # ,则您可以使用 array\u merge() 按预期。尝试使用 #[year]