Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用自定义条件从多维数组中删除重复值_Php_Sql_Arrays_Algorithm - Fatal编程技术网

如何在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.:”

  • 使用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快得多,因此您需要使用实际数据进行测试,看看循环是否比单独的查询快。

    您的解决方案确实正确,我正在研究您掌握这些内置PHP函数的方法,这非常有趣。谢谢。也许我会用Benchmarkr更新这个问题php与sql排序