hab*_*bit 87
只要所有数组的长度相同,您就可以使用array_mapwith null作为第一个参数.
array_map(null, $a, $b, $c, ...);
Run Code Online (Sandbox Code Playgroud)
如果某些数组较短,则它们将使用空值填充最长的长度,这与python不同,其中返回的结果是最短数组的长度.
Jak*_*mpl 16
array_combine 来得很近.
否则就像自己编码一样:
function array_zip($a1, $a2) {
for($i = 0; $i < min(length($a1), length($a2)); $i++) {
$out[$i] = [$a1[$i], $a2[$i]];
}
return $out;
}
Run Code Online (Sandbox Code Playgroud)
Gum*_*mbo 13
尝试使用此函数创建一个类似于Python的数组数组zip:
function zip() {
$args = func_get_args();
$zipped = array();
$n = count($args);
for ($i=0; $i<$n; ++$i) {
reset($args[$i]);
}
while ($n) {
$tmp = array();
for ($i=0; $i<$n; ++$i) {
if (key($args[$i]) === null) {
break 2;
}
$tmp[] = current($args[$i]);
next($args[$i]);
}
$zipped[] = $tmp;
}
return $zipped;
}
Run Code Online (Sandbox Code Playgroud)
您可以根据需要将此函数传递给任意数量的项目.
这与Python的zip()功能完全一样,并且与PHP <5.3兼容:
function zip() {
$params = func_get_args();
if (count($params) === 1){ // this case could be probably cleaner
// single iterable passed
$result = array();
foreach ($params[0] as $item){
$result[] = array($item);
};
return $result;
};
$result = call_user_func_array('array_map',array_merge(array(null),$params));
$length = min(array_map('count', $params));
return array_slice($result, 0, $length);
};
Run Code Online (Sandbox Code Playgroud)
它以Python的方式合并数组,zip()并且不会返回到达最短数组末尾后找到的元素.
下列:
zip(array(1,2,3,4,5),array('a','b'));
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
array(array(1,'a'), array(2,'b'))
Run Code Online (Sandbox Code Playgroud)
以下内容:
zip(array(1,2,3,4,5),array('a','b'),array('x','y','z'));
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
array(array(1,'a','x'), array(2,'b','y'))
Run Code Online (Sandbox Code Playgroud)
请查看此演示以获取上述证明.
编辑:添加了对接收单个参数的支持(array_map在这种情况下表现不同;感谢Josiah).
zip()非常匹配并同时使用内置 PHP 函数的解决方案是:
array_slice(
array_map(null, $a, $b, $c), // zips values
0, // begins selection before first element
min(array_map('count', array($a, $b, $c))) // ends after shortest ends
);
Run Code Online (Sandbox Code Playgroud)
array_map(null, $a, $b, $c)调用?正如我在评论中已经提到的,我倾向于支持 nabnabit 的解决方案 ( array_map(null, $a, $b, ...)),但方式略有修改(如上所示)。
一般来说是这样的:
array_map(null, $a, $b, $c);
Run Code Online (Sandbox Code Playgroud)
是 Python 的对应物:
itertools.izip_longest(a, b, c, fillvalue=None)
Run Code Online (Sandbox Code Playgroud)
(list()如果您想要列表而不是迭代器,请将其包装起来)。因此,它并不完全符合模拟zip()行为的要求(除非所有数组都具有相同的长度)。
| 归档时间: |
|
| 查看次数: |
15872 次 |
| 最近记录: |