php array_merge_recursive保留数字键

2022-08-30 15:35:02

我只想合并

$a = array("59745506"=>array("up" => 0,));
$b = array("59745506"=>array("text" => "jfrj"));
$c = array_merge_recursive_new($a, $b);

结果:

Array
(
    [0] => Array
        (
            [up] => 0
        )

    [1] => Array
        (
            [text] => jfrj
        )

)

预期结果:

    Array
(
    [59745506] => Array
        (
            [up] => 0
            [text] => jfrj
        )

)

http://www.php.net/manual/en/function.array-merge-recursive.php 中的第二条评论正在工作,它是否是我的情况的最佳解决方案(我需要合并具有多个数字键和2个级别的数组)?

另一种解决方法是使用array_map(函数()...


答案 1

array_replace_recursive() 函数看起来就是你需要的。

$a = array("59745506" => array("up" => 0,));
$b = array("59745506" => array("text" => "jfrj"));
$c = array_replace_recursive($a, $b);
var_export($c);

// array (
//   59745506 => 
//   array (
//     'up' => 0,
//     'text' => 'jfrj',
//   ),
// )

答案 2

您的期望作为 和 的键是 numeric(!)而失败,即使您将其表示为字符串文本(参见 PHP:数组 -> 语法)。$a$b

我认为是否有更好的解决方案取决于您确切需要什么。它可能比递归合并更简单:

1) 你确定 和 数组中的每个值都永远是数组吗?$a$b

2)如果这些数组共享一个公共密钥(即,如果在您的示例中再次出现),会发生什么?是否继续递归合并?"text""up"


推荐