Есть массив
[{"id":256,"owner":"2","to":"1","message":"312"},
{"id":257,"owner":"2","to":"1","message":"312"},
{"id":258,"owner":"1","to":"1","message":"3125"},
{"id":259,"owner":"3","to":"1","message":"3162"},
{"id":260,"owner":"2","to":"1","message":"3125"}]
В котором значение to всегда одинаковое, message как повезет(совпадет или нет), а owner разное, с повторениями, как удалить все повторения, которые встречаются в owner и оставить по 1 значению с наибольшим id(То есть последнее)
Пробовал воспользоваться функцией array_unique но она удаляет всё, так как to у всех одинаковое
Решение, при условии что данные предварительно отсортированы по id :
$data = [
["id" => 256, "owner" => "2", "to" => "1", "message" => "312"],
["id" => 257, "owner" => "2", "to" => "1", "message" => "312"],
["id" => 258, "owner" => "1", "to" => "1", "message" => "3125"],
["id" => 259, "owner" => "3", "to" => "1", "message" => "3162"],
["id" => 260, "owner" => "2", "to" => "1", "message" => "3125"]
];
foreach ($data as $item) {
$ret[$item['owner']] = $item;
}
var_dump($ret);
Если сортировка в массиве будет по ID, то можно попробовать такой способ
<?php //php 7.0.8
$values = '[
{"id":256,"owner":"2","to":"1","message":"312"},
{"id":257,"owner":"2","to":"1","message":"312"},
{"id":258,"owner":"1","to":"1","message":"3125"},
{"id":259,"owner":"3","to":"1","message":"3162"},
{"id":260,"owner":"2","to":"1","message":"3125"}
]';
$values = json_decode($values, true);
$array = [];
foreach($values as $val){
$array[$val['owner']] = [
'id' => $val['id'],
'to' => $val['to'],
'message' => $val['message']
];
}
var_dump($array);
?>
(выполнить код в rextester)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости