将两个数组的值与相同的键组合在一起

时间:2018-02-05 10:53:47

标签: php arrays

我有两个这样的数组:

$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搜索并尝试了几乎任何东西(合并,合并,加入),但我无法弄明白。有什么建议吗?

3 个答案:

答案 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外连接。

Try all of the above online!

答案 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