2011-01-13 92 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()这样的函数