我有两个这样的数组:
$arr1 = Array ( [1] => ab [2] => cd [at] => ef )
$arr2 = Array ( [1] => gh [2] => ij [at] => kl )
我想将这两个数组合并到这个数组中:
$arr3 = Array ( [1] => ab-gh [2] => cd-ij [at] => ef-kl )
两个数组中的键是相同的,所以我想可以将数组的值与上面的“ - ”连接起来。
我用Google搜索并尝试了几乎任何东西(合并,合并,加入),但我无法弄明白。有什么建议吗?
答案 0 :(得分:4)
如果可以保证这两个数组总是具有相同的键:
$arr3 = array();
foreach ($arr1 as $key => $val1) {
$val2 = $arr2[$key];
$arr3[$key] = $val1 . "-" . $val2;
}
现在,假设两个键具有不同的键,并且您希望只使用两个数组中存在的键来执行“连接”数组:
$arr3 = array();
foreach (array_intersect(array_keys($arr1), array_keys($arr2)) as $key) {
$arr3[$key] = $arr1[$key] . "-" . $arr2[$key];
}
这类似于SQL内部联接。
如果你想用数组的 中的键做一个“连接”数组,连字符只能加入两者中存在的那些:
$arr3 = array();
foreach (array_merge(array_keys($arr1), array_keys($arr2)) as $key) {
if (isset($arr1[$key]) && isset($arr2[$key])) {
$arr3[$key] = $arr1[$key] . "-" . $arr2[$key];
} else {
$arr3[$key] = (isset($arr1[$key]) ? $arr1[$key] : $arr2[$key]);
}
}
这类似于SQL外连接。
答案 1 :(得分:1)
假设您有两个具有相同数量的值和相同键的数组。
这应该有所帮助:
$arr1 = Array ("ab", "cd", "at" => "ef");
$arr2 = Array ("gh", "ij", "at" => "kl");
$combinedArray = array();
function combineValues(array $array1, array $array2)
{
$array3 = array();
foreach($array1 as $key => $value)
{
$array3[$key] = $value . "-" . $array2[$key];
}
return $array3;
}
$combinedArray = combineValues($arr1, $arr2);
我真的希望这会有所帮助。
问候。
答案 2 :(得分:1)
虽然接受的答案完全没问题,但这是一个更通用的解决方案,可以用于任意数量的数组:
$arr1 = [1 => 'ab', 2 => 'cd', 'at' => 'ef'];
$arr2 = [1 => 'gh', 2 => 'ij', 'at' => 'kl'];
$arr3 = [1 => 'mn', 2 => 'op', 'at' => 'qr'];
$arr = [$arr1, $arr2, $arr3];
$keys = array_intersect(...array_map('array_keys', $arr));
$result = array_combine($keys, array_map(function ($key) use ($arr) {
return implode('-', array_column($arr, $key));
}, $keys));
这是the demo。