[英]PHP: array_merge() in alternate order (zip order)?
是否有本機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函數用於此目的,該函數保留鍵但保持順序? 找不到某事:-/
沒有用於此目的的PHP本機功能。 但是根據@Mark Baker的評論,實現此功能的可能性很小:
$a = array("a","b","c");
$b = array("d","e","f");
$c = array("g","h","i");
function array_zip(...$arrays) {
return array_merge(...array_map(null, ...$arrays));
}
var_dump(array_zip($a,$b,$c));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.