【发布时间】:2017-09-22 22:27:38
【问题描述】:
是否有本地 PHP 函数来压缩合并两个数组?
看下面的例子:
$a = array("a","b","c");
$b = array("d","e","f");
$c = array("g","h","i");
var_dump(array_merge($a,$b,$c));
这会产生:
array(9) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
[5]=>
string(1) "f"
[6]=>
string(1) "g"
[7]=>
string(1) "h"
[8]=>
string(1) "i"
}
随心所欲:
array(9) {
[0]=>
string(1) "a"
[1]=>
string(1) "d"
[2]=>
string(1) "g"
[3]=>
string(1) "b"
[4]=>
string(1) "e"
[5]=>
string(1) "h"
[6]=>
string(1) "c"
[7]=>
string(1) "f"
[8]=>
string(1) "i"
}
在此之前我编写了自己的 - 测试了一个有效的 - 功能:
function array_zip(...$arrays) {
$res = array();
while(true) {
$check_finish = true;
foreach($arrays as $array) {
if(!empty($array)) {
$check_finish = false;
}
}
if($check_finish) {
break;
} else {
foreach($arrays as $key => $array) {
if(!empty($array)) {
array_push($res,array_shift($array));
$arrays[$key] = $array;
}
}
}
}
return $res;
}
但是,有没有原生的 PHP 函数来合并这样的数组(也许性能更高)?是否有一个用于此目的的原生 PHP 函数可以保留密钥但保持顺序?没找到 :-/
【问题讨论】:
-
一个不错的小单行:
var_dump(array_merge(...array_map(null, ...[$a,$b,$c])));需要 PHP >= 5.6.0 -
请参阅:stackoverflow.com/q/797251/3933332 了解一些想法
-
如果Transposing multidimensional arrays in PHP 和How to Flatten a Multidimensional Array? 有了孩子,那就是这个页面。换句话说,这是 Stack Overflow 上两个非常成熟的规范页面的组合。
标签: php arrays transpose flatten array-merge