【问题标题】:PHP: compare two arrays and sort by priorityPHP:比较两个数组并按优先级排序
【发布时间】:2011-01-13 18:24:40
【问题描述】:

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

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

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;
  }

【问题讨论】:

    标签: php sorting comparison multidimensional-array


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
          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]);
                }
              }
            }
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多