С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 06.05.2017
Сообщений: 6

Как вывести из массива уникальные значения?

06.05.2017, 18:58. Показов 8340. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые.
Подскажите нубу, как можно из массива вывести лишь оригинальные значения?
То есть, имеем массив:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        $data = array(
            array(
                'filter' => 'Люди',
                'name' => 'Иван Иванов',
            ),
            array(
                'filter' => 'Города',
                'name' => 'Москва',
            ), 
            array(
                'filter' => 'Люди',
                'name' => 'Пётр Петров',
            ),
            array(
                'filter' => 'Люди',
                'name' => 'Семен Семенов',
            ),
            array(
                'filter' => 'Города',
                'name' => 'Петербург',
            ),
            array(
                'filter' => 'Города',
                'name' => 'Самара',
            ),
        );
И вот из него надо вывести оригинальные значения по ключу filter, чтобы в итоге получилось:
HTML5
1
2
Люди
Города
Заранее благодарю за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2017, 18:58
Ответы с готовыми решениями:

Как реализовать функцию, которая принимает и возвращает в массив уникальные значения из исходного массива
Объясните пожалуйста, как реализовать функцию uniq, которая принимает, как аргумент, массив, и возвращает массив, в котором оставлены...

Уникальные значения массива
Доброго времени суток. Столкнулся с проблемой. Есть такой код: if(preg_match_all($search, $result, $maches)){ $uniq =...

Вывести уникальные значения двухмерного символьного массива
Добрый день. Помогите с программой.Дан двухмерный символьный массив к нему написать функцию вывода уникальных значений. Вот что есть на...

8
35 / 35 / 11
Регистрация: 17.03.2017
Сообщений: 250
06.05.2017, 19:06
PHP
1
2
3
4
5
6
7
    for($i=0;$i<count($data); $i++) {
            
            
            
        echo $data[$i][filter]."<br>";
            
        }
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.05.2017, 19:07
php >= 5.5
PHP
1
echo implode('<br>', array_unique(array_column($data, 'filter')));
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.05.2017, 19:14
Цитата Сообщение от andykarm Посмотреть сообщение
PHP
1
echo $data[$i][filter]."<br>";
Мне сегодня прям везет - уже третий раз пишу об этой ошибке
Notice: Use of undefined constant filter - assumed 'filter' in ... on line ...
0
0 / 0 / 1
Регистрация: 06.05.2017
Сообщений: 6
06.05.2017, 23:51  [ТС]
echo implode('<br>', array_unique(array_column($data, 'filter')));
У меня тут по некоторым причинам лишь PHP 5.3

PHP
1
2
3
 for($i=0;$i<count($data); $i++) {
        echo $data[$i][filter]."<br>";        
        }
Прошу прощения, я неверно сформулировал.
Приведенный вами цикл вернёт все по ключу filter. То есть:
HTML5
1
2
3
4
5
6
Люди
Города
Люди
Люди
Города
Города
А мне надо выбрать только оригинальные. То есть, чтобы вернуло только
HTML5
1
2
Люди
Города
По одному значению, без повторов.

Добавлено через 2 часа 18 минут
Урра! Ответ нашел. Гугл знает всё, просто некоторые нубы, в моём лице, не могут правильно сформулировать вопрос.
Функция, прямо в туториале PHP, русским по серому (позор нубам )
Удаление повторяющихся значений
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function unique_multidim_array($array, $key) {
    $temp_array = array();
    $i = 0;
    $key_array = array();
 
    foreach($array as $val) {
        if (!in_array($val[$key], $key_array)) {
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array;
}
И строка
PHP
1
2
3
4
5
    $data = unique_multidim_array($data,'filter');
    foreach($data as $row)
    {
        echo $row['filter'].'<br>';
    }
Замечательно работает!

Добавлено через 2 часа 11 минут
Вроде как нашел ещё один способ, даже более подходящий в моём случае. И он работает, но... как слишком много кода, не знаю, можно ли сократить
Имеется массив, где значение filter записано через запятую:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        $data = array(
            array(
                'filter' => 'Люди, Мужчины',
                'name' => 'Иван Иванов',
            ),
            array(
                'filter' => 'Города',
                'name' => 'Москва',
            ), 
            array(
                'filter' => 'Люди, Женщины',
                'name' => 'Людмила Петрова',
            ),
            array(
                'filter' => 'Люди, Мужчины',
                'name' => 'Семен Семенов',
            ),
        );
Выводим из массива все значения по ключу filter в строку $data2, так же отделяя их запятой
PHP
1
2
3
4
        foreach($data as $row)
        {
        $data2 .=', '.$row['filter'];
        }
Затем, записываем эту строку в массив используя в качестве разделителя опять же запятую, и убирая через array_filter пустое значение
PHP
1
$data3 = array_filter(explode(',', $data2));
А потом выводим из получившегося одномерного массива $data3 данные через православную array_unique, которая отсекает повторы!
PHP
1
2
3
4
5
    $result = array_unique($data3);
        foreach($result as $row)
        {
            echo $row.'<br>';
        }
В итоге получается отличная табличка, которая и была нужна:
HTML5
1
2
3
4
Люди
Женщины
Мужчины
Города
Способ, конечно, ужасно нубацкий, но он работает и именно так, как надо.
Вроде бы.
Кажется.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
07.05.2017, 10:06
KatS13, Как вывести из массива уникальные значения?
0
0 / 0 / 1
Регистрация: 06.05.2017
Сообщений: 6
07.05.2017, 22:15  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
php >= 5.5
PHP
Выделить код
1
echo implode('<br>', array_unique(array_column($data, 'filter')));
Простите, но у меня это не работает. PHP Version 5.3.3
Поэтому и пришлось вот так извращаться.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
07.05.2017, 22:23
Цитата Сообщение от KatS13 Посмотреть сообщение
PHP Version 5.3.3
Хватит пользоваться денвером.

на 5.3 можно так
PHP
1
echo implode('<br>', array_unique(array_map(function ($e) { return $e['filter']; }, $data)));
без функций работы с массивом и без извращений
PHP
1
2
3
4
5
6
7
$unique = array();
foreach ($data as $e) {
    $unique[$e['filter']] = true;
}
foreach ($unique as $k => $v) {
    echo $k, '<br>';
}
0
0 / 0 / 1
Регистрация: 06.05.2017
Сообщений: 6
08.05.2017, 00:03  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Хватит пользоваться денвером.
Пока не могу по некоторым причинам, хотя open server уже лежит скачанный

Цитата Сообщение от Jewbacabra Посмотреть сообщение
$unique = array(); foreach ($data as $e) { $unique[$e['filter']] = true; } foreach ($unique as $k => $v) { echo $k, '<br>'; }
Не совсем. Моё извращение исключает повторяющиеся значения не только по ключу, но и выбранных данных.
То есть ваш код из массива
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$data = array(
    array(
        'filter' => 'Люди, Мужчины',
        'name' => 'Иван Иванов',
        ),
    array(
        'filter' => 'Города',
        'name' => 'Москва',
        ),
    array(
        'filter' => 'Люди, Женщины',
        'name' => 'Людмила Петрова',
        ),
    array(
        'filter' => 'Города',
        'name' => 'Ленинграда',
        ),
Вернёт:
HTML5
1
2
3
Люди, Мужчины
Города
Люди, Женщины
А моё извращение
PHP
1
2
3
4
5
6
7
8
9
10
    foreach($data as $row)
{
  $data2 .=', '.$row['filter'];
}       
  $data3 = array_filter(explode(',', $data2));
  $result = array_unique($data3);
    foreach($result as $row)
        {
        echo $row.'<br>';
        }
HTML5
1
2
3
4
Люди
Мужчины
Города
Женщины
Увы, требуется именно второй вариант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2017, 00:03
Помогаю со студенческими работами здесь

Вывести уникальные значения
есть страница на ней выводятся картинки по категориям, в базе у меня есть поле категории в нем есть повторяющиеся значения, например...

Получить все уникальные значения массива
Есть таблица 4х4, в ней 16 значений, из них от 2 до 8 уникальны, а остальные дублируют эти значения. Я пытаюсь вывести эти уникальные...

Только уникальные значения массива строк
Доброе время суток, господа. Такой у меня вопрос к знающим людям. У меня есть такой массив string str, содержащий в себе строки вида ...

Выбрать уникальные значения одномерного массива
Добрый день. Подскажите как найти уникальные значения из одномерного массива, к концу дня башка не варит уже.

Как для каждого значения одного массива вывести все значения второго массива?
Как для каждого значения одного массива вывести все значения второго массива? Есть два массива: Array ( =&gt; 163 =&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru