【问题标题】:php - Compare arrays with duplicated valuesphp - 比较具有重复值的数组
【发布时间】:2018-12-17 13:43:38
【问题描述】:

我需要比较不删除任何值)2个数组但是每个数组都可以有重复的值,例如我有这两个数组:

$options = ['G', 'W'];
$selectedOptions = ['G', 'G', 'W'];

这应该返回FALSE。下面是我的代码。它工作得很好,但仅适用于唯一值,如何为重复值“升级”它?

$mergeOptions = array_merge($selectedOptions, $options);
$intersect = array_intersect($selectedOptions, $options);
$diff = array_diff($mergeOptions, $intersect);

if (count($diff) === 0) {
    // $options are 'equal' to $selectedOptions
} else {
    // $options are not 'equal' to $selectedOptions
}

更多示例:

| selected | options | result |  
+----------+---------+--------+  
|  G, G, W |  G, W   |  FALSE |
+----------+---------+--------+
|   G, W   |  G, W   |  TRUE  |
+----------+---------+--------+
| G, P, W  | G, G, W |  FALSE |
+----------+---------+--------+
| G, P, G  | P, G, G |  TRUE  |
+----------+---------+--------+

【问题讨论】:

  • 不清楚你想做什么或因为这些重复
  • $options = ['G', 'W'];, $selectedOptions = ['P', 'G', 'W']; 是结果truefalse ?
  • @Cid 应该返回FALSE
  • @RiggsFolly 这并不完全是重复的,因为他不想删除它们,而是要比较即使存在重复
  • 你确定@DavidWinder 吗?似乎是解决方案的最简单途径

标签: php arrays


【解决方案1】:

您可以使用sort 对数组进行排序,然后进行比较。

$a = ["P", "G", "G"];
$b = ["G", "P", "G"];
sort($a);
sort($b);

if ($a == $b) {
    echo "TRUE \n";
} else {
    echo "FALSE... \n";
}

【讨论】:

  • 排序是个好主意,当 Riggs 关闭问题时,我正在使用 array_count_values() 发布答案
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 2017-09-24
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多