2017-01-28 1 views
2

シナリオ:チェックすると二つの配列間で重複するキー/値

入力:教師

A1: 
[designation] => Array 
    (
     [0] => 24 
     [1] => 25 
     [2] => 26 
     [3] => 27 
     [4] => 24 
     [5] => 25 
    ) 

[grade_scale] => Array 
    (
     [0] => 1 
     [1] => 2 
     [2] => 3 
     [3] => 4 
     [4] => 1 
     [5] => 10 
    ) 

さて、A1の配列に二回繰り返され、同じ指定があるの指定&スケールのアレイ、それはA2の異なる成績を持つ同じ指定が存在することができるため、問題ありません。

ただし、同じ指定の2つの出現がある場合、それらのグレードは異なるはずです。

上記のシナリオでは、指定24と25は重複しています。

  • 指定25があるため、同じグレードの正確に同じインデックスで1と1すなわちので
  • 指定24がOKでない異なるグレードのOKです。
  • 私がこれまで試してみました何

$counts = array_count_values($a1); 


$filtered = array_filter($a1, function ($value) use ($counts) { 
    return $counts[$value] > 1; 
});    

$filtered配列は私に重複のインデックス番号を与えます。

$filtered 
(
    [0] => 24 
    [1] => 25 
    [4] => 24 
    [5] => 25 
) 

A2配列の同じインデックスの値も重複しているかどうかをチェックしたいと思います。このシナリオでは、指定24は同じインデックスでA2のグレードが同じです。

+0

var_dump(array_intersect_key($ array1、$ array2)); – mwweb

+0

@mwweb指定が同じかどうか、同じ指定の成績も同じかどうかを確認しようとしています。 – Moorani

+0

だから1配列ではない2 – mwweb

答えて

2

A2配列内の同じインデックスでの値がarray_filterarray_count_valuesarray_intersect_keyarray_fliparray_unique機能使用 すぎる

溶液重複しているかどうかをチェックする:

$a1 = [0 => 24, 1 => 25, 2 => 26, 3 => 27, 4 => 24, 5 => 25]; 
$a2 = [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 1, 5 => 10]; 

// getting all duplicate designation values from $a1 array 
$counts = array_filter(array_count_values($a1), function($v){ return $v > 1; }); 
$dup_designations = []; 

// iterating through all duplicate 'designation' items from $a1 array 
foreach ($counts as $k => $v) { 
    // obtaining respective items from $a2 array by key intersection 
    // with current designation items sequence 
    $grades = array_intersect_key($a2, array_flip(array_keys($a1, $k))); 

    // check if found duplicates within $a2 array have the same value 
    if (count(array_unique($grades)) != count($grades)) { 
     $dup_designations[] = $k; 
    } 
} 

print_r($dup_designations); 

出力:

Array 
(
    [0] => 24 
) 
+0

あなたは命の恩人です!可能であれば、あなたのソリューションを詳しく教えていただけますか? – Moorani

+1

@Pallew、よろしくお願いします。私はコメントを介していくつかの説明を追加しました – RomanPerekhrest

関連する問題