2016-11-24 28 views
1

我想将两个数组合并成几乎相同的值。如果存在,我总是希望将数组元素插入到组合数组中。 为:以特定的方式合并两个数组

$b = array("a","a","b","a","a","x") 

$a = array("a","a","b","x","a","a") 

我想要的输出:

$ab = array ("a","a","b","x","a","a","x"); 

功能array_mergearray_combine不起作用。

+4

你可以扩展一下你的逻辑是什么? – sidyll

+0

我有一个数组,我以两种不同的方式操作,因此在最后得到两个分离的数组,并且我想再次将它粘合到一个数组中。 –

+0

好的,但加入它们后面的逻辑是什么? “如果数组元素存在,将数组元素插入数组”意味着什么?存在于什么?哪一个插入其中? – sidyll

回答

0

我用下面的代码

$b = array("a","a","b","a","a","x"); 
$a = array("a","a","b","x","a","a"); 
$list = []; //empty array 

for ($i=0; $i < count($a) ; $i++) { 
    for ($j=$i; $j <=$i ; $j++) { 

     if ($i== $j) { 
      $list[] = $a[$i]; //if values are equal, list[] gets array a value 
     } 
     else{ 
     $list[] = $b[$j]; 
     } 
    } 
} 

return $list; 

结果是:["a","a","b","x","a","a"]

+0

结果应该是'[“a”,“a”,“b”,“x”,“a”,“a”,“x”]'。在结尾处有一个'x'缺失... –

+0

@MoeJoe我很想知道你是否在其他阵列上试过我的答案? – Rasclatt

1

我也许会尝试使用array_splice()。你必须尝试这种不同的阵列上,看它是否适用于所有情况:

<?php 
$b = array("a","a","b","a","a","x"); 
$a = array("a","a","b","x","a","a"); 

function iterateToEven(&$a,&$b) 
    { 
     $c = count($a); 
     for($i = 0; $i < $c; $i++) { 
      if(isset($a[$i])){ 
       if(isset($b[$i])) { 
        if($a[$i] == $b[$i]) 
         continue; 
        else { 
         if(isset($b[$i+1]) && ($b[$i+1] == $a[$i])) 
          array_splice($a,$i,0,$b[$i]); 
         elseif(isset($a[$i+1]) && ($a[$i+1] == $b[$i])) 
          array_splice($b,$i,0,$a[$i]); 
         else 
          array_splice($a,$i,0,$b[$i]); 
        } 
       } 
      } 
     } 

     if(end($a) != end($b)) { 
      if(count($a) == count($b)) 
       iterateToEven($a,$b); 
     } 

     return (count($a) > count($b))? $a : $b; 
    } 

$d = iterateToEven($a,$b); 

print_r($d); 

给人的输出:

Array 
(
    [0] => a 
    [1] => a 
    [2] => b 
    [3] => x 
    [4] => a 
    [5] => a 
    [6] => x 
) 

一个警告,这种方法会同时修改$a & $b阵列在执行此功能的过程中,如果要保持$a$b的完整性,可以将函数应用程序包装到另一个函数中,并返回$d