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 aboutarray\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。不过非常感谢,我将对此进行更多的研究。