Пример массива:
array(
0 => array(
'alias' => 'test',
'title' => 'stack',
'content' => 'overflow',
'year' => 2019,
'test' => null
),
1 => array(
'alias' => null,
'title' => 'stack',
'content' => 'overflow',
'year' => null,
'test' => null
),
2 => array(
'alias' => 'else',
'title' => 'demo',
'content' => 'stack_overflow',
'year' => 2020,
)
);
Уникальным ключом является title
, выходит массивы с индексами 0, 1
, являются дублями, таких массивов может быть очень много...
Мне нужно оставить только тот массив в котором меньше всего значений null
, то есть в данном случае массив с индексом 1
нужно удалить, так-как это дубль массива с индексом 0
и т.д. Таких дублей может быть разное количество.
Думал сделать что-то подобное:
if(strlen(serialize($array))) {
//Пишем массив который длиннее
}
Но не могу придумать как найти совпадения...
В итоге написал такую функцию:
public function removeArrayDuplicates($array, $index_key) {
$result = array_reverse(
array_values(
array_column(
array_reverse($array), null, $index_key)
)
);
return $result;
}
var_dump(removeArrayDuplicates($array, $title));
Получаю массивы без дублей и с нужными значениями.
UPDATE: Всё таки не с нужными значениями.
Данная функция не сработала как ожидалось поэтому нагородил другую. Эта точно работает как нужно. Может кому то будет полезно, либо сможете улучшить мой ответ.
function removeArrayDuplicates($array, $search_key) {
$stored_duplicates = array();
$max_array_length = null;
$current_array = null;
$result = array();
foreach($array as $item) {
$stored_duplicates[$item[$search_key]][] = $item;
}
foreach($stored_duplicates as $arrays) {
foreach($arrays as $item) {
if(count($arrays) > 1) {
$array_length = strlen(serialize($item));
if($array_length > $max_array_length) {
$max_array_length = $array_length;
$current_array = $item;
}
}
else {
$result[] = $item;
}
}
if($current_array) {
$result[] = $current_array;
$max_array_length = null;
$current_array = null;
}
}
return $result;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
В программе база данных MYSQL подключается несколько раз к нескольким страницамПроблема в том, что подключение успешно лишь для первой страницы,...