2012-10-18 36 views
7

Tôi có một mảng gọi $mydata trông như thế này:được đếm giá trị trong một mảng với 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 
    ) 
) 

tôi đã gán mảng để Smarty $smarty->assign("results", $mydata)

Bây giờ, trong mẫu, tôi cần để in bao nhiêu "từng loại" có trong mảng. Bất cứ ai có thể giúp tôi làm điều này?

+0

sẽ luôn có chỉ mục cho loại trong mỗi phần tử trong mảng? và bạn có muốn đếm tất cả hoặc chỉ những người có giá trị cao hơn không? – pythonian29033

+0

có, sẽ có. Và các giá trị luôn cao hơn 0. – Phil

Trả lời

16

PHP 5.3, 5.4:

Tính đến Smarty 3 bạn có thể làm

{count($mydata)} 

Bạn cũng có thể đặt ống trong Smarty 2 hoặc 3:

{$mydata|count} 

Để đếm lên "loại" giá trị mà bạn sẽ phải đi bộ qua mảng trong hoặc PHP hay 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+:

Với PHP 5.5+ và Smarty 3 bạn có thể sử dụng chức năng array_column mới:

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

Tôi có Smarty 3, nhưng làm cách nào để có được các số khác nhau của "loại" từ {count ($ mydata)}? – Phil

+0

Tôi nghĩ rằng tôi đã trả lời câu hỏi của bạn với bản chỉnh sửa của tôi. –

14

Bạn đã thử này ?:

{$mydata|@count} 

nơi đếm được đi qua các tính php function()

+0

Nó làm việc cho tôi ... nhưng sự khác biệt giữa ** | count ** và ** | @ count ** –

+0

@Poonam Bhatt, Tôi thực sự không biết, khi tôi trả lời câu hỏi này, tôi đã thực hiện một số nghiên cứu , được mã hóa một vài dòng và tìm ra điều này, và cách đây khá lâu – pythonian29033

+10

@PoonamBhatt trích dẫn: '" @ "áp dụng công cụ sửa đổi trực tiếp cho mảng thay vì từng phần tử riêng lẻ'', xem: [Smarty FAQ] (http://smarty.incutio.com/?page=SmartyFrequentlyAskedQuestions#template-1) – jens

4

Bạn cũng có thể sử dụng:

{if $myarray|@count gt 0}...{/if} 
Các vấn đề liên quan