Убрать одинаковые значения в массиве
Вот есть такой массив $actualPostsIdArr
Array
(
[0] => Реклама,Мультфильм
[1] => Обучение, Инструкция
[2] => Инструкция
[3] => Инструкция
)
Делаю так
$actualPostsIdArrUnique = array_unique($actualPostsIdArr);
Что выводит
Array
(
[0] => Реклама,Мультфильм
[1] => Обучение, Инструкция
[2] => Инструкция
)
Нужно получить ['Реклама','Мультфильм','Обучение','Инструкция']; Как это сделать средствами php ?
Ответы (2 шт):
Автор решения: Kirzzz
→ Ссылка
$arr =
[
'Реклама, Мультфильм',
'Обучение, Инструкция',
'Инструкция',
'Инструкция'
];
$emtyArr=[];
for($i=0;$i<count($arr);$i++){
if(count(explode(',',$arr[$i]))>1){
array_push($emtyArr,trim(explode(',',$arr[$i])[0]));
array_push($emtyArr,trim(explode(',',$arr[$i])[1]));
}else{
array_push($emtyArr,trim($arr[$i]));
}
}
print_r(array_unique($emtyArr));
Если я вас правильно понял, то вот. Функция trim используется для удаления пробелов из начала и концы строки. Так как у вас после запятой стоят пробелы, то array_unique будет воспринимать " Инструкция" и "Инструкция", и дабы этого избежать пришлось прибегнуть к ней.
Автор решения: Dmitry
→ Ссылка
$result = array_reduce($actualPostsIdArr, function($carry, $item) {
return array_merge(
$carry,
array_map('trim', explode(',', $item))
);
}, []);
$result = array_unique($result);
То же самое с пояснениями
// Для каждого элемента из массива выполняем функцию, которая:
// ↓ ↓
$result = array_reduce($actualPostsIdArr, function($carry, $item) {
$arr1 = explode(',', $item); // 1. Разбивает строку на массив строк,
// используя в качестве разделителя ','
$arr2 = array_map('trim', $arr1); // 2. Для каждой строки в получившемся массиве $arr1
// вызывает функцию trim(), которая удаляет пробелы
// из начала и конца строки
return array_merge($carry, $arr2); // 3. Объединяет получившийся массив $arr2 с массивом $carry,
// полученном на предыдущей итерации
}, []);
$result = array_unique($result); // убирает повторяющиеся значения из массива