Добрый день,
Нужно избавится от повторов в массиве.
есть одноуровневый массив $city, полученный так:
{cgsimple::get_page_content($child.alias,'city','city')}
затем мне нужно убрать из этого массива повторы и посчитать количество уникальных предметов в массиве.
В php это как то так:
$result = array_unique($city);
как это реализовать в smarty или через udt?
благодарю за помощь
Помощь в написании udt array_unique
-
- New Member
- Posts: 8
- Joined: Sat Oct 25, 2014 11:47 pm
Re: Помощь в написании udt array_unique
Попробуйте так
Code: Select all
{$city|@array_unique}
-
- New Member
- Posts: 8
- Joined: Sat Oct 25, 2014 11:47 pm
Re: Помощь в написании udt array_unique
Работает, но только если в массиве названия городов написаны латиницей. Не работает в случае с кирилицей. Можно в smarty добавить локаль?
в php :
SORT_LOCALE_STRING - compare items as strings, based on the current locale.
в php :
SORT_LOCALE_STRING - compare items as strings, based on the current locale.
Re: Помощь в написании udt array_unique
Попробуйте так
Если не сработает, то вот вам тег пользователя array_unи его вызов
Code: Select all
{$city|@array_unique:SORT_LOCALE_STRING}
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}
-
- New Member
- Posts: 8
- Joined: Sat Oct 25, 2014 11:47 pm
Re: Помощь в написании udt array_unique
Большое спасибо за помощь. с кирилицей оказалось работает, я только вот с другой пролемой столкнулся.
т.к. {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 не существует на страницах.
т.к. {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
Попробуйте так
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}