如何在PHP中使用自定义条件从多维数组中删除重复值
这是一个类似于的问题,但有点不同,到目前为止我还没有找到答案。 看看这个:如何在PHP中使用自定义条件从多维数组中删除重复值,php,sql,arrays,algorithm,Php,Sql,Arrays,Algorithm,这是一个类似于的问题,但有点不同,到目前为止我还没有找到答案。 看看这个: Array ( [0] => Array ( ['id'] => abc ['value'] => XXX ) [1] => Array ( ['id'] => abc ['value'] => ooo ) [2] => Array (
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
)
)
我希望识别二维数组中的所有重复值,并使用自定义条件删除它们,例如中的
例如,以前3个元素[0]、[1]、[2]为例:
我希望XXX能够战胜其他人,因此[1]和[2]将被删除
[3]、[4]和[5]相同:它们具有相同的id,但YYY胜过XXX和其他值
因为这些是从DBMS检索的数据,所以我有一个选择,就是进行N个不同的查询,通过下一个查询传递要排除的id,
e、 g.:”
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快得多,因此您需要使用实际数据进行测试,看看循环是否比单独的查询快。您的解决方案确实正确,我正在研究您掌握这些内置PHP函数的方法,这非常有趣。谢谢。也许我会用Benchmarkr更新这个问题php与sql排序