PHP:比较两个数组并按优先级排序

时间:2011-01-13 18:24:41

标签: php sorting comparison multidimensional-array

我想比较两个数组:一个包含可能的选项列表,另一个包含优先级。

这就是两个数组的组织方式:

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

这是$ options包含的内容:

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

这是$ priority包含的内容:

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

我想复制$ options中的重复值,并保留具有最低优先级的唯一身份的值:

输出为: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;
  }

2 个答案:

答案 0 :(得分:0)

这听起来像是一个非常专业的场景,没有特定于PHP的基础。话虽如此,我会查看http://php.net/manual/en/ref.array.php该页面,了解PHP函数的具体细节,以便使用PHP数组。我会研究像uksort()和uasort()

这样的函数

答案 1 :(得分: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]);
          }
        }
      }
    }
  }
}