ホームページ > バックエンド開発 > PHPチュートリアル > PHP で特定のプロパティによってオブジェクトの配列を並べ替えるにはどうすればよいですか?

PHP で特定のプロパティによってオブジェクトの配列を並べ替えるにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-25 04:51:12
オリジナル
352 人が閲覧しました

How to Sort an Array of Objects by a Specific Property in PHP?

プロパティによる配列内のオブジェクトの並べ替え

オブジェクトの配列を扱うとき、特定の属性に基づいてオブジェクトを整理する必要がある場合があります。フィールドまたはプロパティ。この記事では、名前や数などの指定したフィールドでオブジェクトの配列を並べ替える方法について説明します。

これを実現するために、PHP には usort 関数が用意されています。最初の引数として配列を受け取り、2 番目の引数として呼び出し可能なものを受け取ります。これは比較関数として機能します。この比較関数は、比較の結果を示す整数を返します。最初のオブジェクトが 2 番目のオブジェクトより前に来る場合は -1、それらが等しい場合は 0、2 番目のオブジェクトが最初のオブジェクトより前に来る場合は 1 です。

オブジェクトの配列を使用した例を考えてみましょう:

$array = [
    (object) ['name' => 'Mary Jane', 'count' => 420],
    (object) ['name' => 'Johnny', 'count' => 234],
    (object) ['name' => 'Kathy', 'count' => 4354],
];
ログイン後にコピー

この配列を名前フィールドで並べ替えるには、比較関数を次のように定義できます。

function cmp($a, $b) {
    return strcmp($a->name, $b->name);
}
ログイン後にコピー

これで、usort を使用して配列を並べ替えることができます:

usort($array, 'cmp');
ログイン後にコピー

これにより、名前フィールドの昇順で配列が並べ替えられます。

代替アプローチ

従来の比較関数に加えて、PHP はさまざまな機能を提供します並べ替えの代替アプローチ:

  • 匿名関数: これらを使用すると、比較関数をインラインで定義できます。例:
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
ログイン後にコピー
  • クラス内: クラスがある場合は、比較メソッドを定義して渡すことができます。例:
class MyComparator {
    public function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
}

$array = usort($array, [new MyComparator(), 'cmp']);
ログイン後にコピー
  • アロー関数 (PHP 7.4 ): これらは比較関数を定義する簡潔な方法を提供します。例:
usort($array, fn($a, $b) => strcmp($a->name, $b->name));
ログイン後にコピー

数値の比較フィールド

この例の count フィールドなどの数値フィールドを比較する場合、次の比較関数を使用できます。

fn($a, $b) => $a->count - $b->count
ログイン後にコピー

代わりに、PHP 7 では Spaceship 演算子 ( <=>) は、このような比較に使用できます。例:

fn($a, $b) => $a->count <=> $b->count
ログイン後にコピー

以上がPHP で特定のプロパティによってオブジェクトの配列を並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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