使用两个匹配的子值从关联数组中删除元素

问题描述 投票:4回答:3

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

  • 相同的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
        )
}
php duplicates associative-array
3个回答
2
投票

你可以使用SORT_REGULAR选项更多doc是关于HEREarray_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');


1
投票

希望这可以帮到你。

<?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);

0
投票

我想你需要

  1. 定义一个实现Hashtable的类(假设A),以便拥有自己的equals方法。此类的数据成员将是故障单ID和时间戳。
  2. 实例化php set'uniqueEntries'。
  3. 实例化一个数组'duplicateIndexes'。
  4. 对于数组中的每个项目 遍历数组以创建类A的实例,其中包含对象的票证ID和时间戳。 检查Set是否包含此对象。 如果没有,请在Set中添加此新对象。 如果它包含相同的对象,请记下duplicateIndexes数组中的当前迭代计数。
  5. 现在从duplicateIndexes中索引存在的数组中删除元素。
© www.soinside.com 2019 - 2024. All rights reserved.