2011-01-13 28 views
0

2つの配列を比較したい:1つは可能なオプションのリストを含み、もう1つの配列は優先順位を含む。PHP:2つの配列を比較し、優先度でソート

これは、2つの配列が編成されている方法です。

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

と、これは$優先度が含まれているものですが:

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

が、これは$のオプションが含まれているものです

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

I $ 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

0

これはPHPに固有の基盤なく、非常に専門的なシナリオのように聞こえます。そのことが言われて、私はhttp://php.net/manual/en/ref.array.phpそのページにPHP配列の使用のためのあなたの処分でPHPの機能の詳細について調べます。私はuksort()やuasort()のような関数を調べます