laravel PHP

PHPやLaravelで「array_multisort(): Argument #3 must be an array or a sort flag」みたいなエラーが出た時の対処法

カクレクマノミ

 

あなた
配列をソートさせようとしたら「array_multisort(): Argument #3 must be an array or a sort flag」というエラーが出ました。

なぜですか?どうしたらいいですか?

 

今回はこのような疑問に答えていきます。

 

結論:ソートに使う引数が配列でない

 

結論から話すと、このエラーが出る場合は引数が配列になっていない可能性があります。

実際のコードは次のような感じだとします。

 

$datas = $this->messageService->getAllMessage($userId);
        //メッセージを送信日昇順にソート
        $sort = [];
        foreach ($datas as $key => $value) {
            $sort[$key] = $value->id;
        }
        if (isset($sort)) {
            array_multisort($sort, SORT_ASC, $datas);
        }

 

こちらのコード自体には問題はありません。

にも関わらず「array_multisort(): Argument #3 must be an array or a sort flag」というエラーがでるのは、引数として渡している「$sort」か「$datas」に問題ありです。

 

配列になっているかチェックする方法

 

配列ではない疑いがある変数に対して、is_array()メソッドを使って、確かめてみましょう。

コードは次のとおりです。

 

if(!is_array($datas)){
            dd('not array'); //Laravelで試しているので、dd()でログを出しています。それぞれの環境に合わせて出力してください。
        }

 

上記コードで、「not array」が表示されたら、今一度配列になっているかをチェックしましょう。

 

考えられるケース①$sortが配列になっていない

 

$sortが配列になっているか確認しましょう。

また、初期値の設定で

 $sort = [];

のようにしておくと安心です。

 

考えられるケース②$datasが配列になっていない

 

$datasが配列になっているか確かめましょう。

Laravelの場合は、クエリビルダを使ってデータを取得する場合、配列で返させるには「->all()」または「->toArray()」を使う必要があります。

>>参考:toArray()

 

取得時のコードを載せておきます。

以下のような感じです。

$datas = DB::table('messages')
            ->select( 'messages.id', 'messages.user_id as target_id')
            ->orderBy('messages.created_at', 'desc')
            ->get()->all(); //ここで配列化

 

自分はここで少しハマりましたね...。

ちなみに、単純に取得したデータを配列で返したい場合はall()で良いと思います。

 

ということで、今回は、PHPでarray_multisort()を使ったときに出るエラーについての解説でした。

参考になれば幸いです。

 

>PHPの記事一覧

 

プログラミングスクールに関する情報

【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】と書かれた画像
【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】

  あなたプログラミングスクールに通いたいけどたくさんありすぎてどこがいいのかわかりません。   最近はエンジニアブームということもありプログラミングスクールが増えました。 一方でたくさんありすぎてど ...

続きを見る

フリーランス
無料あり:フリーランスを目指せるプログラミングスクールランキング【体験をもとに徹底分析しました】

  あなたフリーランスエンジニアを目指すことができるプログラミングスクールってありますか?   最近では、高年収や働きやすさの魅力からフリーランスエンジニアを目指す方も増えてきまし ...

続きを見る

返金保証ありのプログラミングスクールランキング【エンジニアが選びました】と表示されたパソコンの画面
返金保証ありのプログラミングスクールランキング【エンジニアが選びました】

  あなた返金保証がついているオススメのプログラミングスクールってありますか?   結論から話すと、返金保証つきのプログラミングスクールランキングは次の通りです。   1位:DMMWEBキャンプ  【 ...

続きを見る

WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】と書かれた画像
WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   結論から話すと、WEB系自社開発に行きやすいスクールのランキングは以下の通り。   第1位:テックアカデミー ...

続きを見る

プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】と書かれた画像
プログラミンングスクールに無料で通うならココ【現役エンジニアおすすめ】

  あなたプログラミングスクールに通いたいけどどのスクールも何十万もして通えません。コスパよくエンジニアになれるスクールはありますか?   今回はコスパが良いどころか完全に無料でプ ...

続きを見る

-laravel, PHP

© 2021 エンジニアてんし君ブログ