使用两个匹配的子值从关联数组中删除元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用两个匹配的子值从关联数组中删除元素相关的知识,希望对你有一定的参考价值。
使用下面的示例,如何删除满足以下条件的所有重复顶级数组元素:
- 相同的TicketID_xxxxx和Ticket_Reply_xxxxx数字(其中xxxxx是数字)
- 还有匹配的时间戳?
编辑其他信息:
- 我将始终需要使用TicketID_xxxxx删除子数组,同时使用Ticket_Reply_xxxxx保持子数组
启动数组:
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_REGULAR
选项更多doc是关于HERE的array_uniqy()
<?php
$result = array(
0=>array(0=>'2018-03-03 07:43:15',1=>'TicketID_25500'),
1=>array(0=>'2018-03-03 08:00:00',1=>'TicketID_25500'),
2=>array(0=>'2018-03-03 08:00:00',1=>'Ticket_Reply_25500'),
);
$details = unique_multidim_array($result ,'1');
print_r($details);
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
O / P是:
Array
(
[0] => Array
(
[0] => 2018-03-03 07:43:15
[1] => TicketID_25500
)
[2] => Array
(
[0] => 2018-03-03 08:00:00
[1] => Ticket_Reply_25500
)
)
编辑:
`unique_multidim_array($result ,'1');`
这个函数传递了两个参数。一个是数组,另一个是唯一值的关键。
解释检查数组键值是否已存在
if(!in_array($val[$key], $key_array))
如果该值和键不在数组中将返回该数组,则它会弹出如下:
$temp_array[$i] = $val;
return $temp_array;
为了方便起见,您可以更改Key
,例如“数字键”或“字符串键”,如unique_multidim_array($result ,'a');
或unique_multidim_array($result ,'b');
。
另一答案
希望这可以帮到你。
<?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);
另一答案
我想你需要
- 定义一个实现Hashtable的类(假设A),以便拥有自己的equals方法。此类的数据成员将是故障单ID和时间戳。
- 实例化php set'uniqueEntries'。
- 实例化一个数组'duplicateIndexes'。
- 对于数组中的每个项目 遍历数组以创建类A的实例,其中包含对象的票证ID和时间戳。 检查Set是否包含此对象。 如果没有,请在Set中添加此新对象。 如果它包含相同的对象,请记下duplicateIndexes数组中的当前迭代计数。
- 现在从duplicateIndexes中索引存在的数组中删除元素。
以上是关于使用两个匹配的子值从关联数组中删除元素的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何对数组中结构的子值使用 UISearchResultsUpdating?