2016-11-24 22 views
1

2つの配列をほぼ同じ値で結合したいと考えています。配列要素が存在する場合、配列要素を結合された配列に挿入したいと思っています。 の場合:array_mergearray_combineは動作しません特定の方法で2つの配列をマージする

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

機能:

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

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

私は出力を持っていると思います。

+4

ロジックを少し拡張できますか? – sidyll

+0

私は2つの異なる方法で操作した1つの配列を持っていましたので、最後に2つの配列が分かれていて、もう1つの配列に貼り付けたいのですが... –

+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 
) 

1つの警告は、このメソッドは、両方の$a & $bのアレイを変更しますこの関数を実行する過程で、$a$bのままにしておきたい場合は、関数アプリケーションを別の関数の中にラップし、$dを返すことができます。

関連する問題