web-dev-qa-db-ja.com

phparray_merge_recursive数値キーの保持

単純にマージしたい

$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番目のコメントは機能していますが、これは私の場合に最適なソリューションですか(必要な場合)複数の数値キーと2つのレベルを持つ配列をマージしますか?

別の回避策は、array_map(function()..で実装することです。

25
user1125394

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',
//   ),
// )
59
salathe

$aおよび$bのキーが数値(!)であるため、文字列リテラルとして指定したにもかかわらず、期待は失敗します(cf. PHP:Arrays-> Syntax )。

より良い解決策があるかどうかは、あなたが正確に必要としているものに依存すると思います。再帰的にマージするよりも簡単かもしれません。

1)$aおよび$b配列内のすべての値が常に再び配列になると確信していますか?

2)これらの配列が共通のキーを共有している場合(つまり、この例では"text"が再び"up"だった場合)はどうなるでしょうか。再帰的にマージし続けるかどうか?

1
Conninho