63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
1

Foreach и дублирование результатов

05.09.2016, 18:51. Показов 4438. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.

Прошу помощи. Поискал - то ли не понимаю как искать, то ли в неверных терминах ищу.

При переборе массива с помощью foreach, некоторые записи имеют повторяющиеся данные и из таких записей нужно вывести только первую.

То есть есть результат запроса:

пук - шмяк - кряк
пук - бом - трах
пук - упс - хренасе
опа - жопа - котик
бабах - оляля - трындец

Не понимаю, как вывести только одну, первую, запись с "пуком", то есть пук-шмяк-кряк.

Чтобы финалом был такой вывод:
пук - шмяк - кряк
опа - жопа - котик
бабах - оляля - трындец

К сожалению на уровне запроса дублирующие записи не убрать.


Заранее спасибо за подсказки.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2016, 18:51
Ответы с готовыми решениями:

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

Foreach внутри foreach
Посетители сайта видят список альбомов в мозаичном виде по 3 альбома в ряд, 12 альбомов на...

Дублирование результатов в результате сложного запроса
Приветствую. Есть такой запрос: select tblForums.ID, tblForums.Title, tblForums.Description,...

Дублирование базы , или дублирование информациии
Доброго времени суток ! Поставлена задача: мне нужно либо при изменении или добавлении данных...

11
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
05.09.2016, 19:00 2
А эти гениальные слова в отдельных столбцах в базе или нет? Если в отдельных -- можно всё таки на уровне запроса отсеять, используя GROUP BY.
Покажите массив, который получается.
0
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
05.09.2016, 19:34  [ТС] 3
Массив выглядит так (там есть еще элементы, но тогда простыня будет, сократил.

PHP
1
Array ( [0] => Array ( [id] => 1596 [chain_id] => 130 [r_id] => 45 [e_id] => [a_id] => 2610 [h_id] => 79 [p_id] => 18781 [g_id] => 1251 [rg_id] => [a_a] => 2016-09-10 [a_d] => 2016-09-12 [a_da] => 2) )
Фишка в том, что если к этому ID привязаны 4 элемента, то данные выведутся 4 раза.

И я не могу врубиться, как сделать так, чтобы проверялось - был ли вывод с этим id. И если да - то ничего не выводится.

Добавлено через 10 минут
Короче так...

Через foreach проходит массив, где несколько элементов имеют одинаковый id.
Нужно вывести первый в массиве и проигнорировать остальные элементы с этим id.

Думал ставить в переменную этот id и при чтении следующего элемента сравнивать, был ли такой. Но запутался когда ставить id и когда его unset'ить.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
05.09.2016, 19:36 4
Можно и на уровне запроса отсеять, только вопрос - по какому принципу они сортируются, то есть почему первым в списке оказывается именно пук - шмяк - кряк а не последующие?

Добавлено через 1 минуту
В foreach это сделать вообще очень просто. Сохранять выведенные элементы в массиве и перед выводом проверять на нахождение в массиве, если находится, то не выводить.
0
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
05.09.2016, 19:39  [ТС] 5
К каждому id привязано несколько элементов, один из которых всегда главный. Сортировка происходит по параметру главный - не главные.

Я бы написал всю схему, но там упаритесь разбираться... И запрос никак не поменять, иначе он тупо будет выдавать не те данные.

Но смысл такой - если к id привязано три элемента, он три раза выведет одну и ту же инфу. Сколько элементов привязано - столько и выведет раз. А нужно, чтобы вывел только один раз. И теоретически, отсеивающий фактор - общий id.

То бишь проверять, был ли в выводе такой или нет

Добавлено через 36 секунд
а можно пример?
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
05.09.2016, 19:48 6
Лучший ответ Сообщение было отмечено AlexNewaro как решение

Решение

Цитата Сообщение от AlexNewaro Посмотреть сообщение
а можно пример?
PHP
1
2
3
4
5
6
7
8
9
10
$idsArr = new Array();
 
foreach($records as $record)
{
    if(!in_array($record['id']))
    {
        $idsArr[] = $record['id'];
        //Код вывода
    }
}
1
mrNTF
05.09.2016, 20:04
  #7

Не по теме:

Цитата Сообщение от renat_dmitriev Посмотреть сообщение
PHP
1
$idsArr = new Array();
:umnik:
PHP
1
$idsArr = [];

0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
05.09.2016, 20:06 8
Цитата Сообщение от mrNTF Посмотреть сообщение
$idsArr = [];
От версии зависит. Кажется [] появилось в PHP с 5.4
0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
05.09.2016, 20:10 9
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
От версии зависит. Кажется [] появилось в PHP с 5.4
Да, с 5.4. Но зачем new? Это же не js.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
05.09.2016, 20:41 10
mrNTF, Сорри, путаюсь еще.
0
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
05.09.2016, 20:48  [ТС] 11
Благодарю Вас!!!

PHP
1
2
3
4
5
6
7
8
9
10
11
$idexists = array();
            
foreach($ros as $row0)
{
if(!in_array($row0['id'], $idexists))
{
    $id = $row0['id'];
    $idexists[] =$id;
        //вывод
}
}
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
05.09.2016, 23:41 12
Цитата Сообщение от AlexNewaro Посмотреть сообщение
$idexists = array();
foreach($ros as $row0)
{
if(!in_array($row0['id'], $idexists))
{
* * $id = $row0['id'];
* * $idexists[] =$id;
* * * * //вывод
}
}
Не проще ли?
PHP
1
2
$idexists = array_unique($arr['id']);
print_r($idexists);
1
05.09.2016, 23:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2016, 23:41
Помогаю со студенческими работами здесь

Обработка XML. Цикл foreach (XmlNode.) вложенный во внешний foreach
Здравствуйте. Возникла проблема при обработке XML-файла (с помощью XMLDocument). В теме я новичок....

Ошибка в foreach: foreach statement cannot operate on variables of type 'System.Collections.IEnumerator'
using System; using System.Collections; namespace P { class Program { ...

Нужен простой пример из Foreach в Parallel.Foreach
Покажите любой простой пример из Foreach в Parallel.Foreach. Не могу до конца понять.

List.ForEach vs foreach производительность?
Что лучше использовать в плане производительности List.ForEach или foreach(var ... in ...)? C#...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru