Помощь в написании udt array_unique

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
halfdead18
New Member
New Member
Posts: 8
Joined: Sat Oct 25, 2014 11:47 pm

Помощь в написании udt array_unique

Post by halfdead18 »

Добрый день,

Нужно избавится от повторов в массиве.
есть одноуровневый массив $city, полученный так:
{cgsimple::get_page_content($child.alias,'city','city')}
затем мне нужно убрать из этого массива повторы и посчитать количество уникальных предметов в массиве.

В php это как то так:

$result = array_unique($city);

как это реализовать в smarty или через udt?

благодарю за помощь
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Помощь в написании udt array_unique

Post by guro »

Попробуйте так

Code: Select all

{$city|@array_unique}
halfdead18
New Member
New Member
Posts: 8
Joined: Sat Oct 25, 2014 11:47 pm

Re: Помощь в написании udt array_unique

Post by halfdead18 »

Работает, но только если в массиве названия городов написаны латиницей. Не работает в случае с кирилицей. Можно в smarty добавить локаль?

в php :

SORT_LOCALE_STRING - compare items as strings, based on the current locale.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Помощь в написании udt array_unique

Post by guro »

Попробуйте так

Code: Select all

{$city|@array_unique:SORT_LOCALE_STRING}
Если не сработает, то вот вам тег пользователя array_un

Code: Select all

$smarty = $template->smarty;
$smarty->assign($params['assign'], array_unique($params['array'],SORT_LOCALE_STRING));
и его вызов

Code: Select all

{array_un array=$city assign=city}
halfdead18
New Member
New Member
Posts: 8
Joined: Sat Oct 25, 2014 11:47 pm

Re: Помощь в написании udt array_unique

Post by halfdead18 »

Большое спасибо за помощь. с кирилицей оказалось работает, я только вот с другой пролемой столкнулся.
т.к. {foreach} берёт значения городов с разных страниц, то я получаю не массив из скажем 7 городов, а сем массивов с 1 городом внутри каждого. Как сложить эти маленькие массивы в один?

я сделал так, но наверняка можно сделать проще:

{assign var='myArray' value=','|explode:"
{$cgsimple->get_children('kliniki',0,'children')}
{foreach from=$children item='child' name='childcount'}
{cgsimple::get_page_content($child.alias,'city','city1')}
{$city1},

{/foreach}
foo"}
{assign var='myArray1' value=$myArray|@array_unique}
{assign var='citycounter' value={count($myArray1)}}
{$citycounter}

В следствии чего, мне приходится потом отнимать единицу от count, т.к. город foo не существует на страницах.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Помощь в написании udt array_unique

Post by guro »

Попробуйте так

Code: Select all

{assign var='myArray' value=','|explode:""}
{$cgsimple->get_children('kliniki',0,'children')}
 {foreach from=$children item='child' name='childcount'}
 {cgsimple::get_page_content($child.alias,'city','city1')}
  {assign var=newArr value=","|explode:$city1}
  {assign var=myArray value=$myArray|@array_merge:$newArr}
 {/foreach}
{assign var='myArray1' value=$myArray|@array_unique}
{assign var='citycounter' value={count($myArray1)}}
{$citycounter}
Post Reply

Return to “Russian - русский”