2012-10-18 24 views
7

数组我有一个数组称为$mydata,看起来像这样:获得价值数与智者

Array 
(
[0] => Array 
    (
     [id] => 1282 
     [type] =>2 

     ) 

[1] => Array 
    (
     [id] => 1281 
     [type] =>1 
     ) 

[2] => Array 
    (
     [id] => 1266 
      [type] =>2 
    ) 

[3] => Array 
    (
     [id] => 1265 
     [type] =>3 
    ) 
) 

我分配数组给Smarty $smarty->assign("results", $mydata)

现在,在模板中,我需要打印阵列中每个“类型”有多少。任何人都可以帮我做到这一点?

+0

将始终存在数组中每个元素的索引类型? ,你想计数所有这些或只是那些值大于零? – pythonian29033

+0

是的,会有。值总是高于零。 – Phil

回答

16

PHP 5.3,5.4:

到Smarty 3,你可以做

{count($mydata)} 

你也可以用Smarty 2或3管它:

{$mydata|count} 

要统计 “类型” 值你必须在PHP或Smarty的通过阵列走:

{$type_count = array()} 
{foreach $mydata as $values} 
    {$type = $values['type']} 
    {if $type_count[$type]} 
     {$type_count[$type] = $type_count[$type] + 1} 
    {else} 
     {$type_count[$type] = 1} 
    {/if} 
{/foreach} 

Count of type 2: {$type_count[2]} 

PHP 5.5+:

使用PHP 5.5+和Smarty 3你可以使用新的array_column功能:

{$type_count = array_count_values(array_column($mydata, 'type'))} 
Count of type 2: {$type_count['2']} 
+0

我确实有Smarty 3,但是如何从{count($ mydata)}得到各种数字的“type”? – Phil

+0

我想我已经用我的编辑回答了您的问题。 –

14

你尝试过这个?:

{$mydata|@count} 

其中计数传递PHP函数COUNT()

+0

它为我工作...但** |计数**和** | @ count **之间的区别是什么 –

+0

@Poonam Bhatt, 我其实不知道,当我回答这个问题时,我只是做了一些研究,编码了几行,并计算出来,这是不久前 – pythonian29033

+10

@PoonamBhatt引用:“@”将修饰符直接应用于数组而不是每个单独的元素。“请参阅:[Smarty FAQ](http:///smarty.incutio.com/?page=SmartyFrequentlyAskedQuestions#template-1) – jens

4

您还可以使用:

{if $myarray|@count gt 0}...{/if}