2011-01-13 10 views
0

Ich möchte zwei Arrays vergleichen: eines enthält die Liste der möglichen Optionen und das andere Array enthält Prioritäten.PHP: Vergleiche zwei Arrays und sortiere nach Priorität

Dies ist, wie die beiden Arrays organisiert sind:

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

das ist, was $ Optionen enthält:

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', 
), 
) 

und das ist, was $ Priorität enthält:

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

I möchte die Duplikate Werte aus $ Optionen duplizieren und die eine mit den Uniques mit den niedrigsten Prioritäten behalten ty:

Die Ausgabe wäre: Array (1, 4) Weil 1, 2, 3 sind nicht einzigartig und 1 hat die kleinste Priorität.

ich die folgende Funktion wurde mit Duplikaten zu entfernen, aber ich weiß nicht, wie ich es mit Prioritäten behandeln anpassen können:

ohne Fundament spezifisch für PHP
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; 
    } 

Antwort

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

Schlamm ist klarer als dieser Code – Danon

0

Das klingt wie ein sehr spezielles Szenario. Nachdem ich das gesagt habe, würde ich auf der Seite http://php.net/manual/en/ref.array.php nach den Besonderheiten der PHP-Funktionen für die Verwendung von PHP-Arrays suchen. Ich würde in die Funktionen wie uksort() und uasort() schauen