2016-10-02 37 views
0

我遇到麻煩比較兩個陣列與array_inersect(),嘗試了很多來自SO的建議,但都沒有工作。因此,這裏是我的問題:PHP Array檢查相同值的計數

我有兩個數組:

$base_array = array(2,2,2,1); 

Array 
(
    [0] => 2 
    [1] => 2 
    [2] => 2 
    [3] => 1 
) 

而另外一個$risks,打印這樣的:

Array 
(
    [0] => 2 
    [1] => 3 
    [2] => 4 
    [3] => 1 
    [4] => 2 
    [5] => 8 
    [6] => 6 
) 

我要的是看是否相同數量和值的類型$base_array適合$risks數組。現在它應該返回false,因爲我只有2號兩個OCCURENCES和基礎數組3.但如果我設置$base_array到:

$base_array = array(2,2,1); 

這應該返回true。

+1

顯示您的代碼。 –

+0

我不能讓任何代碼給我我需要的東西,我試過的所有東西都是array_intersect和array_diff,但沒有奏效。總是返回真實原因2存在於兩者中,但不存在相同的發生。 – rgomez

+0

它是否應該在'$ base_array'中有兩個2時返回true?即我們正在檢查是否有兩個2和一個1,對嗎? –

回答

1

一種方法可以計算每個數字的出現,然後手動比較它們。爲此,您需要兩個數組來保持發生次數。

$base_array_count = []; 
$risks_count = []; 

在你的情況$base_array_count看起來就像

$base_array_count[1] = 1 
$base_array_count[2] = 2 

而且$risks_array_count看起來像

$risks_count[1] = 1 
$risks_count[2] = 2 
$risks_count[3] = 1 
$risks_count[4] = 1 
$risks_count[6] = 1 
$risks_count[8] = 1 

現在遍歷$base_array並檢查是否每個數字$base_array_count值相同$risks_array_count

編輯完成代碼:

$base_array = array(1,2,2,7); 
$risks_array = array(2,3,4,5,6,7); 

$base_array_count = array(); 
$risks_array_count = []; 

for($i = 0; $i < sizeof($base_array); $i++){ 
    if(!isset($base_array_count[$base_array[$i]])) 
     $base_array_count[$base_array[$i]] = 0; 
    $base_array_count[$base_array[$i]]++; 
} 

for($i = 0; $i < sizeof($risks_array); $i++){ 
    if(!isset($risks_array_count[$risks_array[$i]])) 
     $risks_array_count[$risks_array[$i]] = 0; 
    $risks_array_count[$risks_array[$i]]++; 
} 

$same = true; 

if (sizeof($base_array) <= sizeof($risks_array)) { 
    for ($i = 0; $i < sizeof($base_array); $i++) { 
     if(!isset($risks_array_count[$base_array[$i]]) || $base_array_count[$base_array[$i]] != $risks_array_count[$base_array[$i]]){ 
      $same = false; 
      break; 
     } 
    } 
} else { 
    $same = false; 
} 
if($same) 
    echo "TRUE"; 
else 
    echo "FALSE"; 
+0

感謝您的建議,我嘗試使用'array_diff',但效果不佳。你能解釋我應該如何循環每個'$ base_array_count'並比較? – rgomez

+0

@rgomez添加了完整的代碼,檢查它是否能解決您的問題。 –

+0

幾乎完美,併爲這樣一絲不苟的抱歉,但這將是我的代碼非常重要。它甚至嘗試在base_array中添加其他數字,比如8或4('$ base_array = array(1,2,2,4,8);'),當然如果我設置2,2,2,它會返回false。但問題來了,如果我設置例如'$ base_array = array(1,2,2,7);'我得到'未定義偏移:7' – rgomez

1

它可以通過array_diff做一些額外的檢查。請看這裏

$base_array = array(1,2,2,7); 
$risks_array = array(1,2,2,3,4,5,6); 

if(array_diff($base_array, $risks_array)) // false if $base_array has type of elemenes which $risk_array does not contain 
echo "false"; // 
else{ 
// $risk_array has all type of elements of $base_array. now check for similar frequency 
$freq_cnt_base = array_count_values($base_array); 
$freq_cnt_risks = array_count_values($risks_array); 
$is_similar = "true"; 

foreach($freq_cnt_base as $key => $val){ 
    if($freq_cnt_risks[$key] !== $freq_cnt_base[$key]){ 
     $is_similar = "false"; 
     break; 
    } 
} 
echo $is_similar; 
}