将数组的每个值连接到另一个数组中的每个其他值

时间:2016-02-25 00:52:27

标签: php arrays

我需要将数组的每个值连接到PHP中另一个数组中的每个其他值。例如:

$arr1 = ['A', 'B'];
$arr2 = ['CDE', 'F'];
$result = $arr1 * $arr2;
// $result = ['ACDE', 'AF', 'BCDE', 'BF'];

我可以使用嵌套的foreach来实现它,但是有没有内置或更快的方法来实现它?据我搜索过,我只找到array_map,它只连接相同的索引。

3 个答案:

答案 0 :(得分:2)

坦率地说,我认为在这种情况下,老式的 foreach可能是更好的解决方案,但是 - 如果你想要array_map - 这是一个{{1只有解决方案(为了清晰起见而爆炸):

array_map

eval.in demo

结果是:

$arr1 = ['A', 'B'];
$arr2 = ['CDE', 'F'];

$result = array();

array_map
(
    function( $row ) use( $arr2, &$result )
    {
        array_map
        (
            function( $row2 ) use( $row, &$result )
            {
                $result[] = "$row$row2";
            }, $arr2
        );
    }, $arr1
);

print_r( $result );

实际上,这是一个“假的”数组映射,因为我们不使用返回值,但我们将元素添加到新数组中。

您可以使用带有反转参数的Array ( [0] => ACDE [1] => AF [2] => BCDE [3] => BF ) 获得相同的结果。

答案 1 :(得分:1)

您可以使用array_map()和一个匿名函数传递第二个数组,并使用use

$arr1 = ['A', 'B'];
$arr2 = ['CDE', 'F'];

array_map(function($a1) use ($arr2) {
        foreach ( $arr2 as $a2 )
            echo $a1 . $a2 . PHP_EOL;
        }
    , $arr1
);

结果是

ACDE
AF
BCDE
BF

它有点像脑筋急转弯,所以你可能需要查找匿名函数。

  

http://php.net/manual/en/functions.anonymous.php

答案 2 :(得分:0)

或者如果您喜欢在不使用闭包的情况下扭曲代码:

function array_product_concat($arr1, $arr2) {
    $arr1c = array_chunk($arr1, 1);
    $arr2c = array_chunk($arr2, 1);
    $arr1cm = array_fill(0, count($arr2), $arr1c);
    $arr1cmc = call_user_func_array('array_map', array_merge(array(null), $arr1cm));
    $arr2cm = array_fill(0, count($arr1), $arr2c);

    $arr1cmcm = call_user_func_array('array_merge', $arr1cmc);
    $arr2cmm = call_user_func_array('array_merge', $arr2cm);
    $arr1cmcmm = call_user_func_array('array_merge', $arr1cmcm);
    $arr2cmmm = call_user_func_array('array_merge', $arr2cmm);
    $result = array_map(null, $arr1cmcmm, $arr2cmmm);
    return array_map('implode', $result);
}
$arr1 = ['A', 'B'];
$arr2 = ['CDE', 'F'];
print_r(array_product_concat($arr1, $arr2));