2012-10-18 54 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}