2012-07-19 12 views
6

Tôi đang cố đếm số lần một giá trị nhất định xuất hiện trong mảng đa chiều của tôi dựa trên điều kiện. Đây là một mảng ví dụ;Đếm các giá trị cụ thể trong mảng đa chiều

$fruit = array (
       "oranges" => array(
            "name" => "Orange", 
            "color" => "orange", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "apples" => array(
            "name" => "Apple", 
            "color" => "green", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "bananas" => array(
            "name" => "Banana", 
            "color" => "yellow", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ), 
       "grapes" => array(
            "name" => "Grape", 
            "color" => "green", 
            "taste" => "sweet", 
            "healthy" => "yes" 
          ) 
      ); 

Nếu tôi muốn hiển thị tất cả trái cây có màu xanh lục, tôi có thể làm như sau (cho tôi biết đây là cách tốt nhất để làm);

for ($row = 0; $row < 3; $row++) { 

    if($fruit[$row]["color"]=="green") { 

     echo $fruit[$row]["name"] . '<br />'; 

    } 

} 

Điều này sẽ xuất ra;

Apple 
Grape 

Đó là tuyệt vời và tôi có thể thấy họ là 2 giá trị đó, nhưng làm thế nào tôi có thể thực sự nhận được PHP để đếm số lượng quả mà màu sắc là màu xanh lá cây và đặt nó trong một biến cho tôi để sử dụng tiếp tục xuống kịch bản để làm việc công cụ ra? Ví dụ. Tôi muốn làm một cái gì đó như;

if($number_of_green_fruit > 1) { echo "You have more than 1 piece of green fruit"; } 

Tôi đã xem xét số đếm(); nhưng tôi không thấy bất kỳ cách nào để thêm mệnh đề 'WHERE/conditional' (a la SQL).

Mọi trợ giúp sẽ thực sự được đánh giá cao.

+0

Thay vì lặp lại tên, hãy đếm. 0 + 1 + 1 + 1 + 1 .... – hakre

Trả lời

8
$number_of_green_fruit = 0; 
for ($row = 0; $row < 3; $row++) { 
    if($fruit[$row]["color"]=="green") { 
     $number_of_green_fruit++; 
     echo $fruit[$row]["name"] . '<br />'; 
    } 
} 
+0

1 giây nhanh hơn tôi ;-) +1 – DaveRandom

+0

@DaveRandomL Yep +1 cho bạn quá :) Dường như OP chỉ thấy câu trả lời của bạn mặc dù: P – Blaster

+0

Cảm ơn rất nhiều cả hai bạn. – user1221488

4

Tất cả bạn cần là một quầy thêm:

for ($row = $number_of_green_fruit = 0; $row < 3; $row++) { 
    if($fruit[$row]["color"]=="green") { 
     echo $fruit[$row]["name"] . '<br />'; 
     $number_of_green_fruit++; 
    } 
} 

if($number_of_green_fruit > 1) { 
    echo "You have more than 1 piece of green fruit"; 
} 
+0

Tôi cảm thấy như một kẻ ngốc bây giờ, cảm ơn bạn đời rất nhiều, tôi sẽ chấp nhận các giải pháp trong 9 phút khi nó cho phép tôi. – user1221488

8

PHP không có sự hỗ trợ cho một loại SQL where điều, đặc biệt là không phải với một mảng của mảng. Nhưng bạn có thể làm tính riêng của bạn trong khi bạn lặp qua các dữ liệu:

$count = array(); 
foreach($fruit as $one) 
{ 
    @$count[$one['color']]++; 
} 

printf("You have %d green fruit(s).\n", $count['green']); 

Cách khác là để viết cho mình một số chức năng helper nhỏ:

/** 
* array_column 
* 
* @param array $array rows - multidimensional 
* @param int|string $key column 
* @return array; 
*/ 
function array_column($array, $key) { 
    $column = array(); 
    foreach($array as $origKey => $value) { 
     if (isset($value[$key])) { 
      $column[$origKey] = $value[$key]; 
     }    
    } 
    return $column; 
} 

Sau đó, bạn có thể nhận được tất cả các màu:

$colors = array_column($fruit, 'color'); 

Và sau đó tính giá trị:

$count = array_count_values($colors); 
printf("You have %d green fruit(s).\n", $count['green']); 

Đó là loại hàm trợ giúp thường hữu ích cho các mảng đa chiều. Nó cũng là suggested as a new PHP function for PHP 5.5.

+0

+1 Đẹp một ..... – Baba