カスタム関数を使用した配列の並べ替えについて
たとえば、関数 uasort() は 2 つのカスタム関数を比較します。
<?phpfunction a_sort($a, $b){ echo $a . '--' . $b . "<br />"; if($a==$b) return 0; return ($a>$b) ? 1 : -1;}function b_sort($a, $b){ echo $a . '--' . $b . "<br />"; if($a==$b) return 0; return ($a>$b) ? -1 : 1;}$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');uasort($arr, 'a_sort');print_r($arr);echo "<br />--------------------<br />";$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');uasort($arr, 'b_sort');print_r($arr);?>
1. カスタム関数の仕組み。たとえば、a_sort: 1 回目は $a='where'、$b='what'; 2 回目は $a=where、$b=20.... これはなぜでしょうか。
2. return 0、1、-1 は何を意味しますか?また、それは並べ替えにどのように影響しますか?
ディスカッションへの返信(解決策)
1回目 $a='where', $b='what' 2回目 $a=where, $b=20 がソートルールの役割です
($a>$b) ? 1 : -1; は小さいものから大きいものへ ($a>$b) ? -1 : 1; は大きいものから小さいものを意味します
1. カスタム関数それは動作します。たとえば、a_sort: 1 回目は $a='where'、$b='what'; 2 回目は $a=where、$b=20.... これはなぜでしょうか。
$a と $b は、a_sort メソッドと b_sort メソッドで定義されたパラメーターです。毎回、比較する必要がある配列内の要素が、比較を実行するために 2 つのパラメーター $a と $b を通じてメソッドに渡されます。
つまり、$a と $b は毎回異なります。
1 回目は $a='where', $b='what'; 2 回目は $a=where, $b=20 です。
比較プロセスでは、配列内の各要素を他の要素と比較するためです。比較してみましょう。
これで $arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how'); になります。実行される
a b
a c
a d
比較
次に
b c
b d
最後に
c d
比較
2. return 0、1、-1 は何を意味し、ソートにどのように影響しますか?
0 は等しい
1 はより大きい
-1 はより小さい
理由を説明せずに
どこで-何を
どこで--20
どのように--どこで
何を --どのように
カスタム並べ替え関数は、挿入並べ替えアルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中央から両端まで拡張されます
2 番目の質問マニュアルでは、それが非常に明確になっています。
比較関数は、最初の引数が 2 番目の引数より小さい、等しい、または大きいとみなされる場合、それぞれゼロより小さい、ゼロに等しい、またはゼロより大きい整数を返す必要があります。
はは、#1 は基本的に言及されていません。#2 は一般原則に基づいているだけです
理由は説明されていません
どこ--何を
どこ--20
どのように--どこで
何を--どのように
カスタム並べ替え関数 挿入ソート アルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中心から両端まで拡張されます
2 番目の質問マニュアルで非常に明確に説明されています:
比較関数は以下とみなされる必要があります。最初のパラメータまたは 2 番目の引数より大きい場合は、それぞれゼロ以下、ゼロ以上、またはゼロより大きい整数を返します。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

PHP の array_group() 関数を使用すると、指定したキーで配列をグループ化し、重複する要素を見つけることができます。この関数は次の手順で動作します。 key_callback を使用してグループ化キーを指定します。必要に応じて、value_callback を使用してグループ化値を決定します。グループ化された要素をカウントし、重複を特定します。したがって、array_group() 関数は、重複する要素を見つけて処理するのに非常に役立ちます。
