4

次のような数値の配列があります。

$array = array(1,1,1,4,3,1);

最も繰り返される値の数を取得するにはどうすればよいですか?

4

10 に答える 10

15

これはうまくいくはずです:

$count=array_count_values($array);//Counts the values in the array, returns associatve array
arsort($count);//Sort it from highest to lowest
$keys=array_keys($count);//Split the array so we can find the most occuring key
echo "The most occuring value is $keys[0][1] with $keys[0][0] occurences."
于 2012-05-16T04:45:41.723 に答える
4

array_count_values 関数が役立つと思います。詳細については、このマニュアルを参照してください: http://php.net/manual/en/function.array-count-values.php

于 2012-05-16T04:48:20.070 に答える
4

次のようにして、配列内の値の出現回数をカウントできますarray_count_values

$counts = array_count_values($array);

次に、カウントに対して逆ソートを実行します。

arsort($counts);

次に、一番上の値をチェックしてモードを取得します。

$mode = key($counts);
于 2012-05-16T04:50:00.433 に答える
3

配列に文字列または整数のみが含まれている場合は、array_count_valuesandのみを使用できarsortます。

$array = array(1, 1, 1, 4, 3, 1);

$counts = array_count_values($array);
arsort($counts);

これにより、最も使用される要素が の最初の要素として残され$countsます。後でカウント量と値を取得できます。

元の配列に同じ数の要素が複数ある場合、どれが得られるかはわかりません。array_count_valuesすべてはとの実装に依存しarsortます。特定のバグが必要な場合は、後でバグを防ぐためにこれを徹底的にテストする必要があります。仮定はしないでください。

特定のものが必要な場合はarsort、リダクション ループを使用せずに自分で作成する方がよいでしょう。

$array = array(1, 1, 1, 4, 3, 1);

/* Our return values, with some useless defaults */
$max = 0;
$max_item = $array[0];

$counts = array_count_values($array);
foreach ($counts as $value => $amount) {
    if ($amount > $max) {
        $max = $amount;
        $max_item = $value;
    }
}

foreach ループの後、見つかった順序で要素$max_itemを返す限り、元の配列に最も多く現れる最後のアイテムが含まれarray_count_valuesます (ドキュメントの例に基づいてケースのように見えます)。非厳密な比較 ($amount >= $maxの代わりに$amount > $max) を使用して、元の配列で最初の項目を最も多く表示することができます。

この方法で、すべての要素を最大数の出現に関連付けることもできます。

$array = array(1, 1, 1, 4, 3, 1);

/* Our return values */
$max = 0;
$max_items = array();

$counts = array_count_values($array);
foreach ($counts as $value => $amount) {
    if ($amount > $max) {
        $max = $amount;
        $max_items = array($value);
    } elif ($amount = $max) {
        $max_items[] = $value;
    }
}
于 2012-05-16T04:59:42.577 に答える
1
$vals = array_count_values($arr);
asort($vals);
//you may need this end($vals);
echo key($vals);

asort がデフォルトで asc または desc をソートするかどうかは覚えていません。コード内のコメントを確認できます。

于 2012-05-16T04:49:30.013 に答える
0
<?php
$arrrand = '$arr = array(';
for ($i = 0; $i < 100000; $i++)
{
    $arrrand .= rand(0, 1000) . ',';
}
$arrrand = substr($arrrand, 0, -1);
$arrrand .= ');';
eval($arrrand);
$start1 = microtime();
$count = array_count_values($arr);
$end1 = microtime();
echo $end1 - $start1;
echo '<br>';
$start2 = microtime();
$tmparr = array();
foreach ($arr as $key => $value);
{
    if (isset($tmparr[$value]))
    {
        $tmparr[$value]++;
    } else
    {
        $tmparr[$value] = 1;
    }
}
$end2 = microtime();
echo $end2 - $start2;

ここでは、両方のソリューションを確認してください: 1array_count_values() つずつ、1 つは手動で。

于 2016-06-07T21:42:44.597 に答える
-1
$arrays = array(1, 2, 2, 2, 3, 1); // sample array

$count=array_count_values($arrays); // getting repeated value with count

asort($count); // sorting array 

$key=key($count);

echo $arrays[$key];   // get most repeated value from array
于 2014-03-03T13:43:11.790 に答える
-1

ここに解決策があります

クラスTestClass {

public $keyVal;
public $keyPlace = 0;

//put your code here
public function maxused_num($array) {
    $temp = array();
    $tempval = array();
    $r = 0;
    for ($i = 0; $i <= count($array) - 1; $i++) {
        $r = 0;
        for ($j = 0; $j <= count($array) - 1; $j++) {
            if ($array[$i] == $array[$j]) {
                $r = $r + 1;
            }
        }
        $tempval[$i] = $r;
        $temp[$i] = $array[$i];
    }
    //fetch max value
    $max = 0;
    for ($i = 0; $i <= count($tempval) - 1; $i++) {
        if ($tempval[$i] > $max) {
            $max = $tempval[$i];
        }
    }
    //get value 
    for ($i = 0; $i <= count($tempval) - 1; $i++) {
        if ($tempval[$i] == $max) {
            $this->keyVal = $tempval[$i];
            $this->keyPlace = $i;
            break;
        }
    }

    // 1.place holder on array $this->keyPlace;
    // 2.number of reapeats $this->keyVal;
    return $array[$this->keyPlace];
}

}

$catch = 新しい TestClass(); $array = array(1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 1, 2, 3, 1, 1, 2 、5、7、1、9、0、11、22、1、1、22、22、35、66、1、1、1); echo $catch->maxused_num($array);

于 2016-04-12T12:16:18.130 に答える