Php 通过键连接2个数组
假设我有两个数组:Php 通过键连接2个数组,php,arrays,join,merge,Php,Arrays,Join,Merge,假设我有两个数组: $arr1 = array ( array ( "animal" => "cat", "color" => "grey" ), array ( "animal" => "dog", "color" => "black" ), array (
$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
from$arr1
和title
from$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
添加狗
和鼠标
的名称即可
我的解决办法是:
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"
)
);
我查看了,但它只是合并了数组,而没有比较它们的键。所以名称索引必须是数组:) 尝试如下
foreach ( $arr1 as $key1 => $entry1 ) {
foreach ( $arr2 as $key2 => $entry2 ) {
if ($entry1 ["animal"] == $entry2 ["title"]) {
if (!isset($arr1[$key1]["name"])) {
$arr1[$key1]["name"] = array();
}
$arr1 [$key1]["name"][] = $entry2 ["name"];
}
}
}
输出
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => ["Rex", "Barney" ]
),
array (
"animal" => "mouse",
"color" => "white",
"name" => ["Abby", "Georgie"]
)
);
在地图中不能多次使用同一关键点。Halayem Anis的解决方案建议在单个“name”键后面使用一个数组,这是一个很好的解决方案代码>因为不能有相同的密钥name@Uchiha:哇,太容易了!不客气。很高兴它对您有所帮助。这是一个很好的解决方案,既适用于使用数组,也适用于在尚未设置密钥时使用正确的初始化。