Php 从具有两个匹配子值的关联数组中删除元素

Php 从具有两个匹配子值的关联数组中删除元素,php,duplicates,associative-array,Php,Duplicates,Associative Array,使用以下示例,如何删除满足以下条件的所有重复顶级数组元素: 相同的票证号和票证号(其中xxxxx为编号) 还有匹配的时间戳吗 编辑其他信息: 我将始终需要删除带有TicketID_uuxxxxx的子数组,而 使用票证\u回复\uxxxxx保留子数组 开始数组: Array ( [0] => Array ( [0] => 2018-03-03 07:43:15 [1] => TicketID_2550

使用以下示例,如何删除满足以下条件的所有重复顶级数组元素:

  • 相同的票证号和票证号(其中xxxxx为编号)
  • 还有匹配的时间戳吗
编辑其他信息:

  • 我将始终需要删除带有TicketID_uuxxxxx的子数组,而 使用票证\u回复\uxxxxx保留子数组
开始数组:

Array
(
    [0] => Array
        (
            [0] => 2018-03-03 07:43:15
            [1] => TicketID_25500
        )

     [1] => Array
         (
            [0] => 2018-03-03 08:00:00 //matching timestamp
            [1] => TicketID_25500
        )

    [2] => Array
        (
            [0] => 2018-03-03 08:00:00 //matching timestamp
            [1] => Ticket_Reply_25500
        )
}
Array
(
    [0] => Array
        (
            [0] => 2018-03-03 07:43:15
            [1] => TicketID_25500
        )

    [1] => Array
        (
            [0] => 2018-03-03 08:00:00
            [1] => Ticket_Reply_25500
        )
}
所需结果:

Array
(
    [0] => Array
        (
            [0] => 2018-03-03 07:43:15
            [1] => TicketID_25500
        )

     [1] => Array
         (
            [0] => 2018-03-03 08:00:00 //matching timestamp
            [1] => TicketID_25500
        )

    [2] => Array
        (
            [0] => 2018-03-03 08:00:00 //matching timestamp
            [1] => Ticket_Reply_25500
        )
}
Array
(
    [0] => Array
        (
            [0] => 2018-03-03 07:43:15
            [1] => TicketID_25500
        )

    [1] => Array
        (
            [0] => 2018-03-03 08:00:00
            [1] => Ticket_Reply_25500
        )
}

您可以使用
SORT\u REGULAR
选项More doc about
array\u uniqy()

已编辑

`unique_multidim_array($result ,'1');` 
此函数正在传递两个参数。一个是数组,另一个是唯一值的键

在检查数组键值是否已存在的说明中

if(!in_数组($val[$key],$key_数组))

如果该值和键不在数组中,则返回数组,否则它会弹出,如下所示:

    $temp_array[$i] = $val;
return $temp_array;
为方便起见,您可以更改
键,如“数字键”或“字符串键”
像
唯一的多维数组($result,'a')
唯一多维数组($result,'b')

我想你需要

  • 定义一个实现Hashtable的类(假设a),这样您就有了自己的equals方法。此类的数据成员将是票证id和时间戳
  • 实例化一个“uniqueEntries”
  • 实例化数组“duplicateIndexes”
  • 对于数组中的每个项目
    • 迭代数组以创建具有票证id的类A的实例 和对象的时间戳
    • 检查集合是否包含此对象
    • 如果没有,请将此新对象添加到集合中
    • 如果它包含相同的对象,请注意duplicateIndexes数组中的当前迭代计数
  • 现在从数组中删除索引存在于duplicateIndexes中的元素

  • 希望这能帮助你

    <?php
    
    $a = array( 
        array("2018-03-03 07:43:15","TicketID_25500"),
        array("2018-03-03 08:00:00","TicketID_25500"),
        array("2018-03-03 08:00:00","Ticket_Reply_25500"),
        array("2018-03-03 08:03:00","Ticket_Reply_25500"),
    );
    
    function array_multi_unique($multiArray){
        $all = array_column($multiArray,1); // pass 0 for timestamp
        $unique = array_values(array_unique($all));
    
        foreach($unique as $key){
            $i = 0;
            foreach($multiArray as $k => $v){
                if(in_array($key,$v)){
                    if($i != 0){
                        unset($multiArray[$k]);
                    }
                    $i++;
                }
            }
        }
    
        $multiArray = array_values($multiArray);
        return $multiArray;
    }
    
    $unique = array_multi_unique($a);
    print_r($unique);
    

    您可以尝试
    array_unique()
    不确定
    array\u unique()
    是否适用于此数组,因为您的输出将与输入相同(对于上面的示例)。数组[0]和数组[1]的时间戳失败,因为在您的示例中时间戳不同:如何从“起始数组”?@Mr.Developer中知道需要在
    [1]
    [2]
    之间保留哪一个?我在中尝试了一些方法,但该主题侧重于所有子值的匹配。在这种情况下,你能举例说明我如何使用array_unique()吗?@cbaconier如果你误读了他的数据,我将始终需要删除TicketID_uuuuxxxxx,同时保留Ticket_Reply_uuuxxxxx。第三个数组元素2是
    Ticket\u Reply\u 25500
    ,您有
    TicketID\u 25500
    。正如我之前在另一篇评论中所说的<代码>数组_unique
    将无法处理此数据良好,输出也是可靠的。做得好。可能需要更详细地介绍一下您所做的工作,因为如果您是新手,这可能会让您感到非常困惑PHP@Nawin多谢各位!您是否介意在代码中添加一些注释,并举例说明如何使用TicketID和Ticket-Reply调用函数unique\u multidim\u array($array,$key)。@Nawin我将此标记为已接受的答案。我的数组实际上要复杂一些,但在初始测试中效果很好。我英语不太好,但我尽了最大努力解释@linwebI。我更喜欢不使用类的方法,除非提供完整的示例,因为我不精通PHP:Classes。不过非常感谢,我将对此进行更多的研究。