2011-01-13 62 views
0

我想比較兩個數組:一個包含可能的選項列表,另一個數組包含優先級。PHP:比較兩個數組並按優先級排序

這是怎麼了兩個數組被組織:

foreach ($varsA as $varA) { 
    foreach ($varsB as $varB) { 
     $options[$varA][$varB] = $id; 
     $priority[$varA] = $priority + $priority[$varA]; 
    } 
} 

這是$選項包括:

array (
    1 => 
    array (
    33307 => 'w', 
    33313 => '7', 
), 
    2 => 
    array (
    33307 => 'w', 
    33313 => '7', 
), 
    3 => 
    array (
    33307 => 'w', 
    33313 => '7', 
), 
    4 => 
    array (
    33307 => '4', 
    33313 => '7', 
), 
) 

,這是什麼$優先包含:

array (
    1 => 5, 
    2 => 9, 
    3 => 9, 
    4 => 5, 
) 

我想要複製$ options中的重複值,並保留具有最低先驗值的唯一值ty:

輸出結果爲:Array (1, 4)因爲1,2,3不是唯一的,1有最小的優先級。

我用下面的函數來刪除重複,但我不知道我怎麼能適應它來處理的優先級:

super_magic($options) { 
    $result = array_map("unserialize", array_unique(array_map("serialize", $options))); 
    foreach ($result as $key => $value) { 
     if (is_array($value)) { 
     $result[$key] = super_magic($value); 
     } 
    } 
    return $result; 
    } 

回答

0
for ($x = 1; $x <= count($options); $x++) { 
    for ($i = 1; $i <= count($options); $i++) { 
    if (array_key_exists($x, $options) && array_key_exists($i, $options)) { 
     if ($x != $i) { 
     $diff = array_diff($options[$x], $options[$i]); 
     if(empty($diff)) { 
      if ($priority[$x] >= $priority[$i]){ 
      unset($options[$x]); 
      } 
     } 
     } 
    } 
    } 
} 
+1

泥比這個代碼更清晰 – Danon 2016-02-25 15:28:32

0

這聽起來像沒有具體到PHP基礎一個非常特殊的情況。說到這一點,我會查看http://php.net/manual/en/ref.array.php該頁面的PHP函數的詳細信息,供您使用PHP陣列。我會研究像uksort()和uasort()這樣的函數