目次
ディスカッションへの返信(解決策)
ホームページ バックエンド開発 PHPチュートリアル カスタム関数を使用した配列の並べ替えについて

カスタム関数を使用した配列の並べ替えについて

Jun 23, 2016 pm 01:50 PM
関数 選別 配列 カスタマイズ

たとえば、関数 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 はより小さい

はは、#1 は何も意味していない、#2 は一般原則に基づいて言っただけ

理由を説明せずに
どこで-何を
どこで--20
どのように--どこで
何を --どのように

カスタム並べ替え関数は、挿入並べ替えアルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中央から両端まで拡張されます

2 番目の質問マニュアルでは、それが非常に明確になっています。
比較関数は、最初の引数が 2 番目の引数より小さい、等しい、または大きいとみなされる場合、それぞれゼロより小さい、ゼロに等しい、またはゼロより大きい整数を返す必要があります。

はは、#1 は基本的に言及されていません。#2 は一般原則に基づいているだけです

理由は説明されていません
どこ--何を
どこ--20
どのように--どこで
何を--どのように

カスタム並べ替え関数 挿入ソート アルゴリズムと組み合わせた双方向バブル アルゴリズムを使用します
比較は中心から両端まで拡張されます

2 番目の質問マニュアルで非常に明確に説明されています:
比較関数は以下とみなされる必要があります。最初のパラメータまたは 2 番目の引数より大きい場合は、それぞれゼロ以下、ゼロ以上、またはゼロより大きい整数を返します。

司会者は本当に素晴らしいです
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

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

PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 May 03, 2024 pm 09:03 PM

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

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで Apr 29, 2024 pm 09:12 PM

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

PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する May 01, 2024 pm 12:30 PM

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

PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する Apr 30, 2024 pm 03:42 PM

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

データソートにおけるPHP配列グループ化機能の応用 データソートにおけるPHP配列グループ化機能の応用 May 04, 2024 pm 01:03 PM

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

C++ 関数例外の詳細: カスタマイズされたエラー処理 C++ 関数例外の詳細: カスタマイズされたエラー処理 May 01, 2024 pm 06:39 PM

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

重複要素の検索における PHP 配列グループ化関数の役割 重複要素の検索における PHP 配列グループ化関数の役割 May 05, 2024 am 09:21 AM

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

See all articles