PHPで配列の中間値を取得する方法

PHPz
リリース: 2023-04-23 13:59:14
オリジナル
989 人が閲覧しました

配列操作のプロセス中に、配列の中央値など、配列内の中間値を取得する必要がある場合があります。 PHP は非常に柔軟な言語であり、さまざまなメソッドを使用して配列の中間値を取得できます。この記事では、配列の中間値を取得するいくつかの方法を紹介します。

方法 1: 並べ替え後に中央値を取得する

この方法は比較的単純で、配列を並べ替えて中央の値を取得するだけです。しかし、この方法には明らかな欠点があり、ソートの計算量は O(nlogn) であり、n が大きい場合には速度が相対的に遅くなります。

PHP には、配列を並べ替えることができる sort() 関数が用意されており、この関数を使用してそれを実現できます。

コード例:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    if ($count % 2 == 0) {
        $median = ($arr[$middle] + $arr[$middle + 1]) / 2;
    } else {
        $median = $arr[$middle];
    }
    return $median;
}
ログイン後にコピー

方法 2: 配列関数を使用して中央値を見つける

PHP にはいくつかの配列関数が用意されており、それらを使用して配列の中央値を計算できます。 。具体的な方法は、まず count() 関数を使用して配列の長さを取得し、次に array_slice() 関数を使用して配列から中央のセグメントを取り出し、最後に array_sum() 関数を使用してそれを合計します。そしてそれを長さで割ります。この方法はより簡単で高速です。

コード例:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    $median = ($count % 2 == 0) ?
        (array_sum(array_slice($arr, $middle, 2)) / 2) :
        $arr[$middle];
    return $median;
}
ログイン後にコピー

方法 3: クイック選択アルゴリズム

上記の 2 つの方法はどちらも配列の並べ替えが必要なため、時間の複雑さは比較的高くなります。実は、並べ替えずに中央値を見つけることができる QuickSelect というメソッドがあります。クイック選択アルゴリズムはクイック ソート アルゴリズムと多くの類似点がありますが、クイック ソートの一部のみが必要なため、時間計算量は O(n) です。

コード例:

function get_median($arr) {
    if (count($arr) % 2 == 0) {
        $k = count($arr) / 2;
    } else {
        $k = (count($arr) + 1) / 2;
    }
    return quick_select($arr, $k);
}

function quick_select(&$arr, $k) {
    if (count($arr) == 1) return $arr[0];
    $p = $arr[0];
    $f = $l = array();
    foreach ($arr as $v) {
        if ($v < $p) $f[] = $v;
        elseif ($v > $p) $l[] = $v;
    }
    if ($k <= count($f)) {
        return quick_select($f, $k);
    } elseif ($k > count($arr) - count($l)) {
        return quick_select($l, $k - (count($arr) - count($l)));
    } else {
        return $p;
    }
}
ログイン後にコピー

上記は、配列の中間値を取得する 3 つの方法であり、シナリオごとに異なる方法が適しています。複数の中間値を取得する必要がある場合は、上記の方法のバリエーションを使用できます。どの方法を使用する場合でも、配列をより適切に処理するには、まず配列の基本操作を理解する必要があります。

以上がPHPで配列の中間値を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!