0

があり、$arrayに格納されている 1 から 10 までの数字の度数を数えたいと考えています$i->x->y

やった

foreach($array as $i){
if($i->x->y == 1){
$a++;
}elseif ($i->x->y == 2){
$b++;
}elseif ($i->x->y == 3){
$c++;
}
...
array_push($count, $a, $b, $c);

私はこれを行うことができ、うまくいきましたが、これを行うためのよりエレガントな方法があると確信しています。array_count_values関数がありますが、これがこの状況にどのように適用されるかはわかりません。

4

2 に答える 2

1

その数のカウントを保持する値で追跡している数としてキーを保持する 2 番目の配列を開始します。例:

$array = array(1,2,3,5,4,7,5,6,9,8,10,4,6,8,7,1,3,6,8,7,10,5,8,3);
$counts = array();
foreach($array as $i) {
    if(array_key_exists($i, $counts)) {
        $counts[$i]++;
    } else {
        $counts[$i] = 1;
    }
}

を実行すると、次のようになりvar_dump($counts);ます。

array(10) {
  [1]=>
  int(2)
  [2]=>
  int(1)
  [3]=>
  int(3)
  [5]=>
  int(3)
  [4]=>
  int(2)
  [7]=>
  int(3)
  [6]=>
  int(3)
  [9]=>
  int(1)
  [8]=>
  int(4)
  [10]=>
  int(2)
}

それがあなたを助けることを願っています。

于 2013-11-15T01:13:25.333 に答える
0

1から0までの各数値にカウンターを持つ頻度配列を使用してテストを行いました

// random numbers to validate
$rnd_arr = array();
// freq array
$freq;

// random numbers
for($i = 0; $i < 500; $i++) {
    array_push($rnd_arr, rand(1, 10));
}

// initiate the counter for each number from 1 to 10
for ($i=1; $i < 10; $i++) { 
    # code...
    $freq[(string) $i] = 0;
}

// check the frequency
for($i = 0; $i < 500; $i++) {
    $freq[(string) $rnd_arr[$i]]+= 1;
}

print_r($freq);

// random output
Array ( [1] => 53 [2] => 61 [3] => 48 [4] => 68 [5] => 48 [6] => 40 [7] => 45 [8] => 56 [9] => 36 [10] => 45 )

コードを投稿するだけで必要なものではない場合は、私がお手伝いします。乾杯

于 2013-11-15T01:07:02.367 に答える