[Laravel] usort関数をLaravelで使用する

2019年1月9日ITLaravel

PHP の usort関数を Laravel で使用する方法です。

HomeController の indexメソッドで usort を使う場合、下記のように書けば、$array の name がコールバック cmp に従って並べ替えられます。(この場合、name の値の昇順になります。)

class HomeController extends Controller
{
    public function index()
    {
        $array = [];
        array_push($array, (object)['name' => 'harada']);
        array_push($array, (object)['name' => 'suzuki']);
        array_push($array, (object)['name' => 'tanaka']);
        array_push($array, (object)['name' => 'aikawa']);
        
        usort($array , array($this, 'cmp'));
        dd($array);
        return $array;
    }

    private function cmp($a, $b)
    {
        $cmp = strcmp($a->name, $b->name);
        return $cmp;
    }
}

結果:

array:4 [▼
  0 => {#692 ▼
    +"name": "aikawa"
  }
  1 => {#689 ▼
    +"name": "harada"
  }
  2 => {#690 ▼
    +"name": "suzuki"
  }
  3 => {#691 ▼
    +"name": "tanaka"
  }
]


usort の第1引数に並べ替えたい配列、第2引数にはを自分で定義したコールバックを使います。

PHPマニュアル コールバック にある「タイプ 3: オブジェクトメソッドのコール」 を使うと、、、

配列1つ目は、HomeController それ自体を表す $this、 2つ目は自分で定義したコールバックの文字列を書きます。

これでusortに渡された配列は自分が定義したコールバックに従って並べ替えられます。


参考:
Using usort in php with a class private function

PHP マニュアル usort http://php.net/manual/ja/function.usort.php

PHP マニュアル callable http://php.net/manual/ja/language.types.callable.php

スポンサーリンク

Posted by nobuhiro harada