現在の位置: ホーム> 最新記事一覧> 多次元アレイソートにPHPのarray_multisort()関数を効率的に使用する方法

多次元アレイソートにPHPのarray_multisort()関数を効率的に使用する方法

gitbox 2025-09-08
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// この記事の始まりはコードとは関係ありません</span></span><span>
</span><span><span class="hljs-comment">// 著者: ChatGPT</span></span><span>
</span><span><span class="hljs-comment">// 日付: 2025-08-23</span></span><span>

</span><span><span class="hljs-comment">// ---------------------- テキスト仕切り ----------------------</span></span><span>

<span class="hljs-comment">/**
 * タイトル: 効率のに使用する方法PHPのarray_multisort()関数は多次元配列をソートします?
 *
 * 多次元配列を使用する場合,開発者は、多くの場合、1つ以上のフィールドに基づいてデータをソートする必要があります。。
 * PHP内置の array_multisort() 函数提供了1つ种高效の方式来成し遂げる这1つ点。
 * 単1つの配列をソートするだけではありません,また、複数の配列または多次元配列を同時にソートすることもできます。
 *
 * 1つ、array_multisort() の基本语法
 * array_multisort(array &amp;$array1, array $array2 = [], array $... = [], int $sorting_order = SORT_ASC, int $sorting_flags = SORT_REGULAR): bool
 *
 * - &amp;$array1:必要なパラメーター,需要排序の第1つ个数组。
 * - $array2, ... :オプションのパラメーター,配列を添付します,用于与第1つ个数组保持对应关系。
 * - $sorting_order:並べ替え,一般的に使用されます SORT_ASC(昇順)、SORT_DESC(降順)。
 * - $sorting_flags:並べ替えタイプ,のように SORT_REGULAR(通常の比較)、SORT_NUMERIC(数の比較)、SORT_STRING(文字列比較)。
 *
 * 二、在多维数组中の应用
 * 当我们有1つ个由多维数组组成の数据集(比のように数据库查询结果),通常、特定のキー値で並べ替えます。
 *
 * 例:
 */</span>

</span><span><span class="hljs-variable">$data</span></span><span> = [
    [</span><span><span class="hljs-string">"id"</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    [</span><span><span class="hljs-string">"id"</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Bob"</span></span><span>,   </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    [</span><span><span class="hljs-string">"id"</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Cindy"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </span><span><span class="hljs-number">78</span></span><span>],
];

</span><span><span class="hljs-comment">// 提取需要排序の列</span></span><span>
</span><span><span class="hljs-variable">$ids</span></span><span>   = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-string">"id"</span></span><span>);
</span><span><span class="hljs-variable">$scores</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span>);

</span><span><span class="hljs-comment">// 按成绩降順,のように果成绩相同按id昇順</span></span><span>
</span><span><span class="hljs-title function_ invoke__">array_multisort</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>, SORT_DESC, </span><span><span class="hljs-variable">$ids</span></span><span>, SORT_ASC, </span><span><span class="hljs-variable">$data</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);

<span class="hljs-comment">/**
 * 出力結果:
 * Array
 * (
 *     [0] =&gt; Array
 *         (
 *             [id] =&gt; 1
 *             [name] =&gt; Bob
 *             [score] =&gt; 92
 *         )
 *
 *     [1] =&gt; Array
 *         (
 *             [id] =&gt; 3
 *             [name] =&gt; Alice
 *             [score] =&gt; 85
 *         )
 *
 *     [2] =&gt; Array
 *         (
 *             [id] =&gt; 2
 *             [name] =&gt; Cindy
 *             [score] =&gt; 78
 *         )
 * )
 *
 * 三つ、ヒントと予防策
 * 1. 使用 array_column() ヘルパー関数は、ソートシーケンスをすばやく抽出できます,ループを避けてください。
 * 2. 複数の並べ替え条件を同時に指定できます,例のように“最初にグレードで,もう一度押しますID”。
 * 3. array_multisort() 会改变原数组の索引,インデックスを保持する必要がある場合,最初に渡すことができます uasort() 成し遂げる。
 * 4. 大規模なデータを処理する場合,array_multisort() の性能要优于手工成し遂げる排序逻辑。
 *
 * 4、要約します
 * array_multisort() 是处理多维数组排序の利器,特别适用于需要对结果集按照多个维度进行排序の场景。
 * 掌握其用法能够显著提升代码の简洁度和执行效率。
 */</span>
</span></span>