1

各 $models['location'] にある値の数を返そうとしています。これを行うために次のコードを思いついたのですが、うまくいきました。問題は、最初のカウントが 0 を返すことです。

出力の例を次に示します0in7B 27in7C 40in8A 36in8B 40in8C。現在、これはほぼ正しいですが、実際にはなどがあります27in7B 40in7C 36in8A。ここで私が間違っていること、またはこれを行うためのより良い方法を誰かが知っていますか?

<?php
    $locations = array();
    foreach($subcategory['Product'] as $models) {
        if ( in_array($models['location'], $locations) ) {
            $i++;
            continue;
        } 
        $locations[] = $models['location'];
        echo $i . "in" . $models['location'] . " ";
        $i = 1;
    }
?>

var_dump($models['location']) は以下を返します:

string(2) "7B" 0in7B string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7B" string(2) "7C" 27in7C string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "7C" string(2) "8A" 40in8A string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8A" string(2) "8B" 36in8B string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8B" string(2) "8C" 40in8C string(2) "8C" string(2) "8C" string(2) "8C" string(2) "8C" string(2) "8C" string(2) "8C" 
4

2 に答える 2

1

編集:この解決策はあなたのものとは少し異なりますが、それは機能します、私はそれをテストしました。

「アルゴリズム」はO(N)のままであることに注意してください。配列を調べるために2番目のforeachを実行する必要がありますが、2番目のforeachにはN個よりもはるかに少ない要素が含まれているため、N型のままです。

$locations = array();
foreach($subcategory['Product'] as $models) {
    if(isset($locations[$models['location']])){
       $locations[$models['location']] += 1;
    } else {
       $locations[$models['location']] = 1;
    }
}

すべてのカウントを含む配列を取得します。あなたがしなければならないのはそれを印刷することだけです。

それがすることは奇妙に見えるかもしれませんが、本当に単純です。配列を調べて、エントリがすでに存在するかどうかを確認します。その位置で値をインクリメントする場合は、値を1で初期化します。

配列には、キーとしてロケーション文字列が含まれます。


次の場合は、短いものとしても実行できます。

$locations = array();
foreach($subcategory['Product'] as $models) {
    isset($locations[$models['location']]) ? $locations[$models['location']] += 1 : $locations[$models['location']] = 1;
}

エコーの例:

 foreach($locations as $key => $count) {
     echo "$count in $key <br />";
 }
于 2013-03-08T19:13:25.673 に答える
0

i反復を開始した時点でが未定義であるために発生する可能性があります。開始$i = 0;後に配置してみてくださいforeach

于 2013-03-08T18:50:11.357 に答える