11

条件に基づいて、特定の値が多次元配列に現れる回数を数えようとしています。配列の例を次に示します。

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

緑色の果物をすべて表示したい場合は、次のようにします (これが最善の方法かどうか教えてください)。

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

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

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

    }

}

これは出力されます。

Apple
Grape

それは素晴らしいことで、そこに 2 つの値があることがわかりますが、実際に PHP に色が緑色の果物の数をカウントさせ、それをスクリプトのさらに下で使用して問題を解決する変数に入れるにはどうすればよいでしょうか? たとえば、次のようなことをしたいです。

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

count(); を見てみました。しかし、'WHERE/conditional' 句 (la SQL) を追加する方法がわかりません。

どんな助けでも本当にありがたいです。

4

4 に答える 4

13

PHP はSQL where、特に配列の配列をサポートしていません。ただし、データを繰り返し処理しながら、独自のカウントを行うことができます。

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

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

別の方法は、小さなヘルパー関数を自分で作成することです。

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

次に、すべての色を取得できます。

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

そして、値を数えます:

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

この種のヘルパー関数は、多次元配列に役立つことがよくあります。PHP 5.5 の新しい PHP 関数としても提案されています。

于 2012-07-19T10:22:48.137 に答える
10
$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 />';
    }
}
于 2012-07-19T10:04:30.250 に答える
5

必要なのは追加のカウンターだけです。

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";
}
于 2012-07-19T10:04:31.593 に答える