PHPで配列の順序を破壊し、添え字を変更しないようにする方法

PHPz
リリース: 2023-04-27 15:54:54
オリジナル
750 人が閲覧しました

PHP プログラミングでは、一連の乱数をソートする必要がある場合や、一連のデータをランダムにサンプリングする必要がある場合など、配列要素の順序を変更する必要があるシナリオによく遭遇します。一般的に、PHP に付属の shuffle() 関数を使用して配列要素をシャッフルできますが、この関数は要素のキー値を変更するため、元の配列の順序の添字が変更され、元の配列が破壊されます。データ構造、整合性。この記事では、配列の添え字の順序を変えずにPHPの配列シャッフルを実装する方法を紹介します。

メソッドの実装

配列の順序の添字を変更せずに PHP 配列シャッフルを実装するには、シャッフル アルゴリズムと同様のメソッドを使用します。つまり、すべての配列要素を新しい要素にコピーします。配列を作成し、新しい並べ替え順序をランダムに生成します。次に、元の配列を反復処理し、その要素を新しい順序で新しい配列に 1 つずつ埋めます。このように、元の配列の添え字の順序は変更されませんが、配列要素の並べ替え順序はランダム化されます。 PHP コードは次のとおりです。

function shuffleArray($arr) {
//配列をコピー
$newArr = $arr;

//ランダムにソート
shuffle ($newArr );

// 元の配列
を走査します ($arr as $key => $value) {

// 将元素按照新顺序填充到新数组中
$arr[$key] = $newArr[$key];
ログイン後にコピー

}

//新しい配列を返します
return $arr;
}

この関数は入力配列 $arr を受け取り、シャッフルされた順序で新しい配列を返します。実装では、参照によって引き起こされる潜在的な問題を回避するために、最初に $newArr = $arr を使用して元の配列を新しい配列に完全にコピーします。次に、PHP 独自の shuffle() 関数を使用して、新しい配列をランダムに並べ替えます。最後に、元の配列を反復処理し、その要素を新しい順序で新しい配列に 1 つずつ埋めて、新しい配列を返します。

この方法の長所と短所

上記の方法を使用すると、元の配列の添字の順序を変更せずに PHP 配列のシャッフルを実現できます。次のような利点があります:

  1. PHP の使用 組み込みの shuffle() 関数の実装は簡潔で理解しやすいです。
  2. 元の配列を新しい配列に完全にコピーすることで、参照によって引き起こされる潜在的な問題を回避でき、コードがより堅牢になります。
  3. 元の配列のデータ構造や要素数を考慮せずに応用範囲が広く、あらゆる種類の配列に適しています。

ただし、この方法には次の欠点もあります。

  1. 実装では、シャッフルされた順序を保存するために追加の配列を使用する必要があり、配列を使用することはできません。その場でシャッフルされます。
  2. 大規模な配列の場合、この方法は効率が低く、余分なスペースに基づいた走査および充填操作が必要になります。大量のデータをスクランブルする必要がある場合は、より効率的なアルゴリズムを使用することをお勧めします。
  3. 絶対的なランダム性を保証する必要があるアプリケーション シナリオ (パスワード生成など) の場合、 shuffle() 関数の最下層はランダム シード呼び出しに依存しているため、データの絶対的なランダム性は保証できません。より安全なランダム生成アルゴリズムを使用する必要があります。

概要

PHP プログラミングでは、配列要素の順序を乱すことは一般的なアプリケーション シナリオです。 shuffle() 関数を使用すると、PHP で配列をシャッフルする簡単な方法ですが、この方法では元の配列の添え字の順序が変更されるため、元の配列のデータ構造が破壊されます。元の配列の添え字の順序を壊さずに PHP 配列のシャッフルを実現するには、シャッフル アルゴリズムと同様の方法を使用できます。この方法には一定の制限があり、配列をそのまま破壊することはできませんが、応用範囲が広く、コードが簡潔で理解しやすいため、PHP プログラミングにおける実用的なツール アルゴリズムです。

以上がPHPで配列の順序を破壊し、添え字を変更しないようにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート