Stack Overflow на русском Asked on February 18, 2021
Задача стоит следующая. Получен массив содержащий другие массивы, например:
$arr = array(
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'заочная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Физика',
'1' => 'очная',
'2' => 'пропуск'
)
);
Из этого набора нужно вытащить только уникальные наборы. Значения во всех поля будут меняться. Собственно не пойму как выбрать массивы основываясь на уникальности нескольких столбцов.
В итоге должен получить массивы:
'Химия', 'очная', 'пропуск'
'Химия', 'заочная', 'пропуск'
'Физика', 'очная', 'пропуск'
Пробовал через array_unique($arr);
, но получаю только одну первую запись
Нашел на сайте вопрос про выборку, но увы мне не подходит.
Стоит добавить, что во внутренних массивах есть еще столбцы содержащие данные также разные.
$arr = array(
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'заочная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Физика',
'1' => 'очная',
'2' => 'пропуск'
)
);
foreach ($arr as $key => $value) {
$set[]=$value[0].';'.$value[1].';'.$value[2];
}
foreach ($set as $key1 => $value1) {
$res[$value1]=$key1;
}
foreach ($res as $key2 => $value2) {
$main[]=explode(";", $key2);
}
print_r($main);
?>
Correct answer by Bloom on February 18, 2021
Можете попробовать сереализовать внутренние массивы, отфильтровать, и сделать обратно десериализацаю. Пример ниже привел:
<?php
$arr = array(
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'заочная',
'2' => 'пропуск'
),
array(
'0' => 'Химия',
'1' => 'очная',
'2' => 'пропуск'
),
array(
'0' => 'Физика',
'1' => 'очная',
'2' => 'пропуск'
)
);
function _serialize($arr)
{
return implode("t", $arr);
}
function _deserialize($data)
{
return explode("t", $data);
}
$arr_unique = array_unique(array_map('_serialize', $arr));
$arr_unique = array_map('_deserialize', $arr_unique);
var_dump($arr_unique);
Answered by Evgenii Izhboldin on February 18, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP