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キャンプ  【 ...

続きを見る

wordpress
【無料あり】WEB制作を学べるオンラインスクールランキング【副業で稼ぎたい方向け】

  あなたWeb制作の副業で稼ぎたいけど、どのスクールで学ぶのが良いの? スクール選びで失敗はしたくないです。   ↑このような疑問や不安を解決するべく、現役のWebエンジニアがWEB制作を学べるスク ...

続きを見る

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

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

続きを見る

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

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

続きを見る

-laravel, PHP

S