Задать вопрос
Cheizer
@Cheizer

Как на php выбрать уникальные записи в цикле?

Есть снипет в CMS, сортирует выводит уникальные записи в цикле, формат записей в массиве такой:
2016-11-11 00:04:00
2017-01-16 00:04:00
2017-09-07 00:04:00

C датой работать не нужно, это уже записанные в базу строки, работать уже нужно как со строкой я так понимаю. Уникальные записи делает, все хорошо. Но вот заморочка небольшая, мне нужно уникальные записи ТОЛЬКО ПО ГОДАМ. НО при этом, вывод должен сохраниться такой как в базе 2017-09-07 00:04:00. Пробовал в первом цикле
это
$countries[] = $partner['date'];
поменять на это
$countries[] = substr($partner['date'],0,4);
но блин результат меняется, печатает только года 2017 мне нужно сохранить вывод.
Вот снипет.
$tpl = 'tpl-datenews';
$modx->resource = $modx->getObject('modResource', 1);
$tv = $modx->resource->getTVValue('field-news');
$countries = array();

$arr = json_decode($tv, true);
foreach($arr as $partner){
 $countries[] = $partner['date'];
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('date'=>$country));
}
return $out;


Как поступить? Выбрать из массива уникальные записи учитывая только года, но при этом сохранить строку в результате для вывода на сайт.
  • Вопрос задан
  • 365 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@DimkaI
Системный адинистратор, разработчик ПО
Я бы модифицировал таким образом цикл:
$arr = json_decode($tv, true);
sort($arr);
$prew = "";
foreach($arr as $partner){
  if ($prew != substr($partner['date'],0,4)) {
    $countries[] = $partner['date'];
    $prew = substr($partner['date'],0,4);
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы