I have a multidimensional array and need to remove entries with the same values for a key.
eg.
Array
(
[0] => stdClass Object
(
[id] => 1177930857
[lat] => 24.479280471802
[lon] => 46.973030090332
[status] => completed
[status_desc] => Order Completed
[date] => 2022-01-05T14:38:53.433Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[1] => stdClass Object
(
[id] => 1177930856
[status] => first_delivery_attempt
[status_desc] => First delivery attempt
[date] => 2022-01-05T14:38:53.429Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[2] => stdClass Object
(
[id] => 1177930566
[lat] => 24.479286193848
[lon] => 46.973037719727
[status] => picked_up
[status_desc] => Picked Up
[date] => 2022-01-05T14:38:09.673Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[3] => stdClass Object
(
[id] => 1177930563
[status] => third_pickup_attempt
[status_desc] => Third pickup attempt
[date] => 2022-01-05T14:38:09.663Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[4] => stdClass Object
(
[id] => 1177930281
[lat] => 24.479211807251
[lon] => 46.973079681396
[status] => on_his_way
[status_desc] => On his way
[date] => 2022-01-05T14:37:23.809Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[5] => stdClass Object
(
[id] => 1177929996
[lat] => 24.479232788086
[lon] => 46.973007202148
[status] => accepted
[status_desc] => Accept
[date] => 2022-01-05T14:36:50.781Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[6] => stdClass Object
(
[id] => 1177906778
[lat] => 24.479225158691
[lon] => 46.97301864624
[status] => picked_up
[status_desc] => Picked Up
[date] => 2022-01-05T14:14:07.153Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[7] => stdClass Object
(
[id] => 1177906776
[status] => second_pickup_attempt
[status_desc] => Second pickup attempt
[date] => 2022-01-05T14:14:07.143Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[8] => stdClass Object
(
[id] => 1177899225
[lat] => 24.479236602783
[lon] => 46.973030090332
[status] => on_his_way
[status_desc] => On his way
[date] => 2022-01-05T14:11:15.398Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[9] => stdClass Object
(
[id] => 1177897941
[lat] => 24.479259490967
[lon] => 46.973037719727
[status] => accepted
[status_desc] => Accept
[date] => 2022-01-05T14:10:18.301Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[10] => stdClass Object
(
[id] => 1175904301
[lat] => 24.479475021362
[lon] => 46.973045349121
[status] => picked_up
[status_desc] => Picked Up
[date] => 2022-01-03T15:01:23.370Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[11] => stdClass Object
(
[id] => 1175904299
[status] => first_pickup_attempt
[status_desc] => First pickup attempt
[date] => 2022-01-03T15:01:23.360Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[12] => stdClass Object
(
[id] => 1175903039
[lat] => 24.479200363159
[lon] => 46.973037719727
[status] => on_his_way
[status_desc] => On his way
[date] => 2022-01-03T15:00:54.959Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
[13] => stdClass Object
(
[id] => 1175446498
[status] => accepted
[status_desc] => Accept
[date] => 2022-01-03T06:30:00.000Z
[driver] => stdClass Object
(
[id] => 1175437372
[name] => xxxxxx
[login] => xxxxxx@gmail.com
[email] => xxxxxx@gmail.com
[status] => active
)
)
)
In this array, there is a field status
, and I need to keep only one entry with the same status which means I need picked_up
status only once. And I am expecting the last entry with the specified status in the result array. I need to apply the same logic to all statuses, eg. on_his_way
, accepted
etc.
I tried this:
$input = array_map("unserialize" , array_unique(array_map("serialize", $input)));
If you need only latest entry for each unique status, you can simply use status
's value as a key in another associative array and keep overriding it at every iteration in the loop. In the end, you will only be left with unique results with latest entries.
Say, you have this array in a variable called $data
, then you could loop like below:
<?php
$set = [];
foreach($data as $o){
$set[ $o->status ] = $o;
}
$set = array_values($set);// if you don't like status keys
print_r($set);