将两个数组之间的柱状值内爆为串联字符串的平面数组
Implode columnar values between two arrays into a flat array of concatenated strings
我有两个数组,$array_A
和 $array_B
。我想将 $array_B
的第一个值附加到 $array_A
的第一个值的末尾,并对两个数组中的所有元素重复此方法。
$array_A = ['foo', 'bar', 'quuz'];
$array_B = ['baz', 'qux', 'corge'];
压缩后的预期输出:
['foobaz', 'barqux', 'quuzcorge']
array_merge($array_A, $array_B)
只是将数组 B 附加到数组 A 上,而 array_combine($array_A, $array_B)
将数组 A 设置为数组 B 的键,这两者我都不想要。 array_map
似乎非常接近我想要的,但似乎总是在两者之间添加一个 space,这是我不想要的。
如果每个数组的长度不相关(例如数组 A 有五个条目,数组 B 有七个条目,额外的条目 ignored/trimmed),这将是理想的选择。
可能是最快的代码,但比其他选项更冗长。
//updated version
$array_A = ['foo', 'bar', 'quuz'];
$array_B = ['baz', 'qux', 'corge'];
for ($i = 0, $c = count($array_A); $i<$c; $i++) {
$result[$i] = $array_A[$i].$array_B[$i];
}
var_dump($result);
PHP 中没有一个数组函数可以做到这一点。但是,你可以自己写一个,比如这个:
function array_zip($a1, $a2) {
$out = [];
for($i = 0; $i < min(sizeof($a1), sizeof($a2)); $i++) {
array_push($out, $a1[$i] . $a2[$i]);
}
return $out;
}
所以给出这些数组和运行它:
$a = ["foo", "bar"];
$b = ["baz", "qux"];
print_r(array_zip($a, $b));
你会得到:
Array
(
[0] => foobaz
[1] => barqux
)
试试这个:
$A = ['foo', 'bar'];
$B = ['baz', 'qux'];
function arraySquish($array)
{
$new = [''];
foreach($array as $val) {
$new[0] .= $val;
}
return $new;
}
$A = arraySquish($A);
$B = arraySquish($B);
echo '<pre>';
print_r($A);
print_r($B);
echo '</pre>';
// updated version
$a = ['a', 'b', 'c'];
$b = ['d', 'e', 'f', 'g'];
print_r(array_map('implode', array_map(null, $a, $b)));
显式 array_map:
<?php
$colours = ['red', 'white', 'blue'];
$items = ['robin', 'cloud', 'mountain'];
$squished =
array_map(
function($colour, $item) {
return $colour.$item;
},
$colours,
$items
);
var_export($squished);
输出:
array (
0 => 'redrobin',
1 => 'whitecloud',
2 => 'bluemountain',
)
如果您只想找到最小的数组,您可以 return null(如果其中一个条目为空),然后过滤结果。
或将数组截断为相同长度:
$b = array_intersect_key($b, $a);
$a = array_intersect_key($a, $b);
无论两个数组是否具有相同的长度,或者一个是否比另一个长,或者数组以什么顺序出现,以下技术都会将值“压缩”到一个平面字符串数组中。
array_map()
只需调用一次,implode()
的默认“胶水”字符串是空字符串——因此可以省略。
代码:(Demo)
$a = ['a', 'b', 'c'];
$b = ['d', 'e', 'f', 'g'];
var_export(array_map(fn() => implode(func_get_args()), $a, $b));
或者用展开运算符合并列数据:(Demo)
var_export(array_map(fn(...$column) => implode($column), $a, $b));
输出:
array (
0 => 'ad',
1 => 'be',
2 => 'cf',
3 => 'g',
)
我有两个数组,$array_A
和 $array_B
。我想将 $array_B
的第一个值附加到 $array_A
的第一个值的末尾,并对两个数组中的所有元素重复此方法。
$array_A = ['foo', 'bar', 'quuz'];
$array_B = ['baz', 'qux', 'corge'];
压缩后的预期输出:
['foobaz', 'barqux', 'quuzcorge']
array_merge($array_A, $array_B)
只是将数组 B 附加到数组 A 上,而 array_combine($array_A, $array_B)
将数组 A 设置为数组 B 的键,这两者我都不想要。 array_map
似乎非常接近我想要的,但似乎总是在两者之间添加一个 space,这是我不想要的。
如果每个数组的长度不相关(例如数组 A 有五个条目,数组 B 有七个条目,额外的条目 ignored/trimmed),这将是理想的选择。
可能是最快的代码,但比其他选项更冗长。
//updated version
$array_A = ['foo', 'bar', 'quuz'];
$array_B = ['baz', 'qux', 'corge'];
for ($i = 0, $c = count($array_A); $i<$c; $i++) {
$result[$i] = $array_A[$i].$array_B[$i];
}
var_dump($result);
PHP 中没有一个数组函数可以做到这一点。但是,你可以自己写一个,比如这个:
function array_zip($a1, $a2) {
$out = [];
for($i = 0; $i < min(sizeof($a1), sizeof($a2)); $i++) {
array_push($out, $a1[$i] . $a2[$i]);
}
return $out;
}
所以给出这些数组和运行它:
$a = ["foo", "bar"];
$b = ["baz", "qux"];
print_r(array_zip($a, $b));
你会得到:
Array
(
[0] => foobaz
[1] => barqux
)
试试这个:
$A = ['foo', 'bar'];
$B = ['baz', 'qux'];
function arraySquish($array)
{
$new = [''];
foreach($array as $val) {
$new[0] .= $val;
}
return $new;
}
$A = arraySquish($A);
$B = arraySquish($B);
echo '<pre>';
print_r($A);
print_r($B);
echo '</pre>';
// updated version
$a = ['a', 'b', 'c'];
$b = ['d', 'e', 'f', 'g'];
print_r(array_map('implode', array_map(null, $a, $b)));
显式 array_map:
<?php
$colours = ['red', 'white', 'blue'];
$items = ['robin', 'cloud', 'mountain'];
$squished =
array_map(
function($colour, $item) {
return $colour.$item;
},
$colours,
$items
);
var_export($squished);
输出:
array (
0 => 'redrobin',
1 => 'whitecloud',
2 => 'bluemountain',
)
如果您只想找到最小的数组,您可以 return null(如果其中一个条目为空),然后过滤结果。
或将数组截断为相同长度:
$b = array_intersect_key($b, $a);
$a = array_intersect_key($a, $b);
无论两个数组是否具有相同的长度,或者一个是否比另一个长,或者数组以什么顺序出现,以下技术都会将值“压缩”到一个平面字符串数组中。
array_map()
只需调用一次,implode()
的默认“胶水”字符串是空字符串——因此可以省略。
代码:(Demo)
$a = ['a', 'b', 'c'];
$b = ['d', 'e', 'f', 'g'];
var_export(array_map(fn() => implode(func_get_args()), $a, $b));
或者用展开运算符合并列数据:(Demo)
var_export(array_map(fn(...$column) => implode($column), $a, $b));
输出:
array (
0 => 'ad',
1 => 'be',
2 => 'cf',
3 => 'g',
)