我需要将数组的每个值连接到PHP
中另一个数组中的每个其他值。例如:
$arr1 = ['A', 'B'];
$arr2 = ['CDE', 'F'];
$result = $arr1 * $arr2;
// $result = ['ACDE', 'AF', 'BCDE', 'BF'];
我可以使用嵌套的foreach
来实现它,但是有没有内置或更快的方法来实现它?据我搜索过,我只找到array_map
,它只连接相同的索引。
答案 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
它有点像脑筋急转弯,所以你可能需要查找匿名函数。
答案 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));