2012-07-19 19 views
6

Bir koşula bağlı olarak çok boyutlu dizimde belirli bir değerin kaç kez göründüğünü saymaya çalışıyorum. İşte bir örnek dizisi;Çok boyutlu dizide belirli değerleri sayın

$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" 
          ) 
      ); 

Ben bütün yeşil renkli meyve DISPLAY istiyorsanız, ben (bu bunu yapmanın en iyi yolu varsa bana bildirin) Uygulaması ile;

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

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

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

    } 

} 

Bu çıktıya;

Apple 
Grape 

harika ve ben görebiliyorum 2 değer vardır onların, ama bana altındaki kullanmak için aslında nasıl alabilirim PHP rengi yeşildir meyve sayısını ve bir değişkene koymak Yani şeyler dışarı çalışmak için script? Örneğin. Ben gibi bir şey yapmak istiyorum;

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

Count(); ama bir 'WHERE/koşullu' yan tümcesi (la SQL) eklemenin herhangi bir yolunu görmüyorum.

Herhangi bir yardım gerçekten takdir edilecektir.

+0

Adın yankılanması yerine, sayımı yapın. 0 + 1 + 1 + 1 + 1 .... – hakre

cevap

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

Benden 1 saniye daha hızlı ;-) +1 – DaveRandom

+0

@DaveRandomL Sizde +1 size de :) OP sadece cevabınızı görüyor: P – Blaster

+0

Çok teşekkürler ikinizde. – user1221488

4

Tek ihtiyacınız ekstra sayaç geçerli:

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

'a hoşgeldiniz. Böyle bir aptal gibi hissediyorum, çok teşekkürler dostum, bana izin verdiğinde 9 dakikada çözümü kabul ediyorum. – user1221488

8

PHP şey bir SQL where tür bir destek, özellikle de Dizilerin bir dizi vardır. Eğer veriler üzerinde yineleme ederken Ama sayma Kendi yapabilirsiniz:

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

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

alternatif kendinize bazı küçük yardımcı işlevi yazmaktır:

/** 
* 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; 
} 

Ardından tüm renkler elde edebilirsiniz:

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

sonra değerlerini saymak

Bu tür yardımcı işlevler genellikle çok boyutlu diziler için yararlıdır. Aynı zamanda suggested as a new PHP function for PHP 5.5.

+0

+1 Güzel bir ..... – Baba

İlgili konular