2012-10-18 14 views
7

Ho un array chiamato $mydata che assomiglia a questo:ottenere conteggio valore in un array con Smarty

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 
    ) 
) 

Ho assegnato la matrice di smarty $smarty->assign("results", $mydata)

Ora, nel modello, ho bisogno per stampare quanto di ogni "tipo" c'è nell'array. Qualcuno può aiutarmi a fare questo?

+0

ci sarà sempre un indice per il tipo in ogni elemento nell'array? e vuoi contarli tutti o solo quelli con un valore superiore a zero? – pythonian29033

+0

sì, ci sarà. E i valori sono sempre superiori a zero. – Phil

risposta

16

PHP 5.3, 5.4:

partire da Smarty 3 si può fare

{count($mydata)} 

Puoi anche collegarlo a Smarty 2 o 3:

{$mydata|count} 

Per contare i valori "tipo" dovrete camminare attraverso la matrice sia in PHP o 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 +:

con PHP 5.5+ e Smarty 3 è possibile utilizzare la nuova funzione array_column:

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

Io ho Smarty 3, ma come faccio a ottenere i vari numeri di "tipo" da {count ($ mydata)}? – Phil

+0

Penso di aver risposto alla tua domanda con la mia modifica. –

14

Hai provato questo ?:

{$mydata|@count} 

dove conteggio passa il conteggio funzione PHP()

+0

ha funzionato per me ... ma qual è la differenza tra il ** | conteggio ** e ** | @ contare ** –

+0

@Poonam Bhatt, io in realtà non lo so, quando ho risposto a questa domanda ho solo fatto qualche ricerca , codificato poche righe e capito questo, e che era un po 'di tempo fa – pythonian29033

+10

@PoonamBhatt citazione: 'la "@" si applica il modificatore direttamente alla matrice, invece di ogni singolo element.' vedere: [Smarty FAQ] (http://smarty.incutio.com/?page=SmartyFrequentlyAskedQuestions#template-1) – jens

4

Puoi anche utilizzare:

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