我需要一个可以与2个数组相交的函数,例如
$Array1 = array(1,2,3);
$Array2 = array(5,6);
重新编号:
$Array3 = array(1,5,2,6,3);
到目前为止,这是
<?php
$Array1 = array(1,2,3);
$Array2 = array(5,6);
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;
}
$bothMonths = zip($Array1, $Array2);
print_r($bothMonths);
?>
具有类似
的输出Array (
[0] => Array (
[0] => 1
[1] => 5
)
[1] => Array (
[0] => 2
[1] => 6
)
)
缺少3,我不知道为什么
此外,我需要纯编程,忘记array_merge
,array_intersect
...或其他功能
谢谢。
答案 0 :(得分:4)
// Interleaves arbitrarily many input arrays. Example:
// a1 = [1, 2, 3], a2 = [5, 6], a3 = [7, 8, 9]
// zip(a1, a2, a3) => [1, 5, 7, 2, 6, 8, 3, 9]
function zip() {
$arrays = func_get_args();
$result = array();
// Count the length of the arrays to get the length of the longest
$longest = array_reduce($arrays, function($old, $e) {
return max($old, count($e));
}, 0);
// Traverse the arrays, one element at a time
for ($i = 0; $i < $longest; $i++) {
foreach($arrays as $a) {
if (isset($a[$i]))
$result[] = $a[$i];
}
}
return $result;
}
这假设您的数组从0开始以数字方式编入索引。
答案 1 :(得分:2)
试试这个:
function custom_intersect($arr1, $arr2) {
$len1 = count($arr1);
$len2 = count($arr2);
$max_len = ($len1 >= $len2) ? $len1 : $len2;
$arr = array();
for($i = 0; $i < $max_len; ++$i)
{
if(isset($arr1[$i]))
{
$arr[] = $arr1[$i];
}
if(isset($arr2[$i]))
{
$arr[] = $arr2[$i];
}
}
return $arr;
}