【发布时间】:2016-07-09 04:47:59
【问题描述】:
假设我有 2 个数组:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black"
),
array (
"animal" => "mouse",
"color" => "white"
)
);
$arr2 = array (
array (
"title" => "mouse",
"name" => "Abby"
),
array (
"title" => "dog",
"name" => "Rex"
),
array (
"title" => "dog",
"name" => "Barney"
),
array (
"title" => "mouse",
"name" => "Georgie"
)
);
我现在想通过密钥加入他们(animal 来自$arr1 和title 来自$arr2)所以我有:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => "Rex",
"name" => "Barney"
),
array (
"animal" => "mouse",
"color" => "white",
"name" => "Abby",
"name" => "Georgie"
)
);
所以只需从$arr2 中添加dog 和mouse 的名称。
我的解决方案是:
foreach ( $arr1 as $key1 => $entry1 ) {
foreach ( $arr2 as $key2 => $entry2 ) {
if ($entry1 ["animal"] == $entry2 ["title"]) {
$arr1 [$key1] ["name"] = $entry2 ["name"];
}
}
}
但它会覆盖第一个条目,所以我只能得到姓氏:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => "Barney"
),
array (
"animal" => "mouse",
"color" => "white",
"name" => "Georgie"
)
);
我查看了array_merge(),但它只是合并数组而不比较它们的键。
【问题讨论】:
-
您不能在地图中多次使用同一个键。 Halayem Anis 的解决方案建议在单个“名称”键后面使用一个数组,这是一个很好的解决方案。
-
只需更新您的代码
$arr1 [$key1] ["name"][] = $entry2 ["name"];,因为您不能拥有相同的键名 -
@Uchiha:哇,这很容易!
-
不客气。很高兴它对您有所帮助。