这是一个与这个问题类似的问题,但略有不同,到目前为止我还没有找到答案。看看这个:
Array
(
[0] => Array
(
['id'] => abc
['value'] => XXX
)
[1] => Array
(
['id'] => abc
['value'] => ooo
)
[2] => Array
(
['id'] => abc
['value'] => qqq
)
[3] => Array
(
['id'] => ghi
['value'] => YYY
)
[4] => Array
(
['id'] => ghi
['value'] => jkl
)
[5] => Array
(
['id'] => ghi
['value'] => XXX
)
[6] => Array
(
['id'] => mno
['value'] => pql
)
)
我想识别二维数组中的所有重复值,并使用自定义条件删除它们,例如在 uasort 中。
例如,取前 3 个元素 [0]、[1]、[2]:
我希望 XXX 胜过其他人,所以 [1] 和 [2] 将被删除,
与 [3]、[4] 和 [5] 相同:它们具有相同的 ID,但 YYY 胜过 XXX 和其他值。
由于这些是从 DBMS 检索的数据,因此我有一个替代方案是进行 N 个不同的查询,将下一个查询传递给要排除的 id,例如:">
- 使用 YYY 查找所有元素
- 使用 XXX 查找所有元素,但在查找 YYY 时尚未找到的元素 查找在
- 查找 YYY 或 XXX 时尚未找到的所有没有 YYY 和 XXX 的元素。
任何帮助将不胜感激,希望这一切都是可以理解的。
Linuxatico
如果不了解您的自定义条件有多复杂,就很难给出有效的解决方案。 如果您知道并且可以提前定义它们,那么您可以做一些简单的事情,例如:
// Your custom conditions
$master = array('abc' => array('XXX'), 'ghi' => array('YYY'));
// $dups = the array in your post
// Group by values
$values = array();
foreach ( $dups as $k => $v ) {
if ( is_array($v) && isset($v['id']) ) {
$values[$v['id']][$k] = $v['value'];
}
}
// If master values exists, use it, otherwise use value given
$deduped = array();
foreach ( $values as $k => $v ) {
if ( isset($master[$k]) ) {
$deduped[key($v)] = array('id' => $k, 'value' => array_shift(array_intersect($master[$k], $v)));
} else {
$deduped[key($v)] = array('id' => $k, 'value' => array_shift($v));
}
}
这给你...
Array
(
[0] => Array
(
[id] => abc
[value] => XXX
)
[3] => Array
(
[id] => ghi
[value] => YYY
)
[6] => Array
(
[id] => mno
[value] => pql
)
)
在许多情况下,PHP 中的循环可能比 MySQL 快得多,因此您需要使用实际数据进行测试,以查看循环是否比单独的查询更快。