Page 1 of 1
Помощь в написании udt array_unique
Posted: Mon Jan 12, 2015 11:05 pm
by halfdead18
Добрый день,
Нужно избавится от повторов в массиве.
есть одноуровневый массив $city, полученный так:
{cgsimple::get_page_content($child.alias,'city','city')}
затем мне нужно убрать из этого массива повторы и посчитать количество уникальных предметов в массиве.
В php это как то так:
$result = array_unique($city);
как это реализовать в smarty или через udt?
благодарю за помощь
Re: Помощь в написании udt array_unique
Posted: Tue Jan 13, 2015 1:24 pm
by guro
Re: Помощь в написании udt array_unique
Posted: Tue Jan 13, 2015 9:58 pm
by halfdead18
Работает, но только если в массиве названия городов написаны латиницей. Не работает в случае с кирилицей. Можно в smarty добавить локаль?
в php :
SORT_LOCALE_STRING - compare items as strings, based on the current locale.
Re: Помощь в написании udt array_unique
Posted: Tue Jan 13, 2015 10:14 pm
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}
Re: Помощь в написании udt array_unique
Posted: Tue Jan 13, 2015 10:47 pm
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 не существует на страницах.
Re: Помощь в написании udt array_unique
Posted: Fri Jan 16, 2015 11:15 am
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}