У меня есть два массива с идентификаторами ключей и некоторые поля, и я хотел бы объединить их, но я не понимаю, почему это не работает, вот мой пример кода:
$Podcasts1 = array("1234" => array('title' => "myTitle", "type" => "myType"));
$Podcast2 = array("1234" => array("content" => "myContent"));
$podcasts = array_merge_recursive($Podcasts1, $Podcast2);
var_dump($Podcasts1, $Podcast2, $podcasts);
Есть результат:
array:1 [▼
1234 => array:2 [▼
"title" => "myTitle""type" => "myType"]
]
array:1 [▼
1234 => array:1 [▼
"content" => "myContent"]
]
array:2 [▼
0 => array:2 [▼
"title" => "myTitle""type" => "myType"]
1 => array:1 [▼
"content" => "myContent"]
]
И есть результат, который я хотел бы получить:
array:[
1234 => array(
"title" => "myTitle""type" => "myType""content" => "myContent")
]
Я не понимаю, почему код на PHP.net работает, а мой — нет
Код:
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
Результат:
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red
[1] => green
)
[0] => blue
)
[0] => 5
[1] => 10
)
Измените ключ 1234 на строку как
$Podcasts1 = array('a' => array('title' => "myTitle", "type" => "myType"));
$Podcast2 = array('a' => array("content" => "myContent"));
$podcasts = array_merge_recursive($Podcasts1, $Podcast2);
var_dump($Podcasts1, $Podcast2, $podcasts);
array_merge_recursive работает на строковых ключах.
Это не будет работать для цифровой клавиши, как сказано в описании функции
Если входные массивы имеют одинаковые строковые ключи, то значения этих ключей объединяются в массив, и это делается рекурсивно, поэтому, если одно из значений является самим массивом, функция объединит его с соответствующей записью в другом массиве тоже. Однако, если массивы имеют одинаковый цифровой ключ, более позднее значение не будет перезаписывать исходное значение, а будет добавлено.