プロパティによる配列内のオブジェクトの並べ替え
オブジェクトの配列を扱うとき、特定の属性に基づいてオブジェクトを整理する必要がある場合があります。フィールドまたはプロパティ。この記事では、名前や数などの指定したフィールドでオブジェクトの配列を並べ替える方法について説明します。
これを実現するために、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']);
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 サイトの他の関連記事を参照してください。