2012-06-18 96 views
0

我需要一个可以相交2个阵列例如相交2个阵列在PHP

$Array1 = array(1,2,3); 
$Array2 = array(5,6); 

reseambles的功能:

$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_mergearray_intersect ...或其他功能

谢谢。

+3

因为你忽略了builtins应该我们认为这是作业?! ;-) – msanders

+0

要素的顺序是否重要? –

+0

@EmilVikström由于函数的名字是'zip',我认为假设两个数组的元素必须像拉链一样互锁是安全的。 –

回答

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; 
} 
+0

它的工作原理,谢谢 – Master345

+0

我不'吨完全理解,我认为增量最大的是最大的数组,对吗?而且,你的代码比别人短,简单而有效 – Master345

+0

@RowMinds是的,'$ max_len'是“最大的数组”。 – B7ackAnge7z

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到了索引。

+0

它的工作原理,谢谢 – Master345