2016-12-29 13 views
0

PHPで2つの配列を比較するにはどうしたらいいですか?2つの配列をどのように比較すればよいですか?

私は倍増が含まれていない配列を返す必要が
$arr1[0] = ['user_id' => 1, 'username' => 'bob']; 
    $arr1[1] = ['user_id' => 2, 'username' => 'tom']; 
    //and 
    $arr2[0] = ['user_id' => 2, 'username' => 'tom']; 
    $arr2[1] = ['user_id' => 3, 'username' => 'john']; 
    $arr2[2] = ['user_id' => 21, 'username' => 'taisha']; 
    $arr2[3] = ['user_id' => 1, 'username' => 'bob']; 

$result[0] = ['user_id' => 3, 'username' => 'john']; 
$result[1] = ['user_id' => 21, 'username' => 'taisha']; 
+0

これを行うには関数を記述する必要があります。あらかじめ書かれた簡単な方法はありません。 – ChrisG

答えて

2

私はちょうど

$tmpArray = array(); 

foreach($newData as $arr2) { 

    $duplicate = false; 
    foreach($oldData as $arr1) { 
    if($arr1['user_id'] === $arr2['user_id'] && $arr1['username'] === $arr2['username']) $duplicate = true; 
    } 

    if($duplicate === false) $tmpArray[] = $arr2; 
} 

次にあなたがNEWARRAYとして$ tmpArrayを使用することができ、ネストされたforeachループを行うだろう

0

私はあなたの質問に機能をつけました

function compareArrays($array1,$array2) 
{ 
    $merged_array = array_merge($array1,$array2); 
    $trimmed_array=[]; 
    foreach($merged_array as $array) 
    { 
     $found=false; 
     $index_flag; 
     foreach($trimmed_array as $key=>$tarr) 
     { 
      if($tarr['user_id']==$array['user_id'] && $tarr['username']==$array['username']) 
      { 
       $found=true; 
       $index_flag=$key; 
       break; 
      } 
     } 
     if($found) 
     { 
      array_splice($trimmed_array, $index_flag,1); 
     } 
     else 
     { 
      array_push($trimmed_array,$array); 
     } 
    } 
    return $trimmed_array; 
} 

私はそれをテストし、正確にあなたの結果を持って、あなたはあなたが目標を達成するための標準機能を使用することができ

compareArrays($arr1,$arr2); 
+0

あなたがこの答えを見つけたら、正確に何を探しているかは、正解とupvoteとして受け入れてください。 –

0

like-配列とそれを呼び出すことができます。ここでは

// Function that sorts element array by key and 
// kinda create string representation (needed for comparing). 
$sortByKeyAndSerialize = function (array $item) { 
    ksort($item); 

    return serialize($item); 
}; 

// Map arrays to arrays of string representation and leave only unique. 
$arr1 = array_unique(array_map($sortByKeyAndSerialize, $arr1)); 
$arr2 = array_unique(array_map($sortByKeyAndSerialize, $arr2)); 

// Merge two arrays together and count values 
// (values become keys and the number of occurances become values). 
$counts = array_count_values(array_merge($arr1, $arr2)); 

// Leave only elements with value of 1 
// (i.e. occured only once). 
$unique = array_filter($counts, function ($item) { 
    return $item === 1; 
}); 

// Grab keys and unserialize them to get initial values. 
$result = array_map('unserialize', array_keys($unique)); 

working demoです。

このコードを関数などに自由にラップすることができます。

コードにネストループを使用しないでください。悪いブードーです。可能であれば、明示的なループ(例:forwhileなど)を使用しないでください。

関連する問題