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

Используя PHP и делая запрос SELECT из БД, я получаю вывод, который мне не нравится.

Я начинаю так:

$details = Db::getInstance()->executeS($sql);

И я получаю, после

echo json_encode($details);

Для целей отладки:

[{"email":"test@on.gr","lastname":"TEST","firstname":"TEST1","id_lang":"1","id_order":"1"}]
[{"email":"test@on.gr","lastname":"OTHER","firstname":"DIFFERENT","id_lang":"1","id_order":"2"}]
[{"email":"test@on.gr","lastname":"THIRD","firstname":"DIFFERENT","id_lang":"1","id_order":"3"}]
[{"email":"new@on.gr","lastname":"THIRD","firstname":"NEW","id_lang":"1","id_order":"4"}]

Что я хочу, чтобы преобразовать массив $details проверить в каждой «строке», имеет ли столбец электронной почты уникальные значения на всем выходе. Если да, удалите строки, содержащие дубликаты записей, и оставьте только первые, содержащие их.

Желаемый вывод:

[{"email":"test@on.gr","lastname":"TEST","firstname":"TEST1","id_lang":"1","id_order":"1"}]
[{"email":"new@on.gr","lastname":"THIRD","firstname":"NEW","id_lang":"1","id_order":"4"}]

(Как вы видите строки с порядком идентификаторов 2 и 3, где они удалены, так как они имеют одинаковый адрес электронной почты с первым)

Любая помощь будет высоко оценена.

0

Решение

Изменить: просто хотел добавить здесь, что мой код не на PHP. Вы должны изменить это.

Выполните команду электронной почты ORDER BY в операторе выбора.
Псевдокод:

Перебрать результаты:

String email1 = "";
String email2 = "";
for (i=0;i<(Detailssize); i++){

email2 = details[email][i]; //Do whatever you need to do to access the value of the email key here.
if(email2 != email1){
KEEP IT
}
else{
THROW AWAY
}
email1 = email2;

}

Очевидно, это не PHP. Прошло много времени с тех пор, как я написал PHP. Тем не менее, по логике это все равно должно работать. Я уверен, что есть способ изменить ваш оператор SELECT, чтобы он возвращал только одно из каждого значения, но я не достаточно хорош в SQL для этого. Это не очень хорошее решение, но надеюсь, что оно поможет.

0

Другие решения

Держите список писем, которые вы видели раньше; всякий раз, когда вы сталкиваетесь с электронным письмом, которое видели ранее, пропустите эту строку.

Как это:

$newSet = array();
$seenBefore = array();
foreach( $details as $row ) {
if( isset( $seenBefore[ $row['email'] ) ) {
continue; // jump to the next row
}
// this email address must be new; add it to things we've seen before then add this row to the newSet
$seenBefore[$row['email']] = true;
$newSet[] = $row;
}

Затем выведите $ newSet любым удобным вам способом.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector