2016-11-24 32 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