質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

2693閲覧

usortで第二引数に指定したコールバック関数が呼び出せないエラー

Mason

総合スコア14

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/27 16:43

前提・実現したいこと

qiitaAPIをいいねが多い順に並べ替えたいです。
usortでなくても、並べ替えられたらいいと考えていますが最適な方法が見つかりません。
同じクラス内にあるクラスをなぜ呼び出せないのかがわからないです。

発生している問題・エラーメッセージ

呼び出せない、または関数名が無効と出ます。

usort() expects parameter 2 to be a valid callback, function 'sortLike' not found or invalid function name

該当のソースコード

Controller

1<?php 2 3namespace App\Http\Controllers; 4 5use GuzzleHttp\Client; 6use Illuminate\Http\Request; 7use Illuminate\Support\Facades\Http; 8 9class ApiController extends Controller 10{ 11 public function sortLike($a, $b) 12 { 13 return $a->likes_count > $b->likes_count ? -1 : 1; 14 } 15 16 public function api() 17 { 18 $url = 'https://qiita.com/api/v2/items'; 19 $parameters = [ 20 'page' => 3, 21 'per_page' => 10, 22 'query' => 'php' 23 ]; 24 $response = Http::get($url, $parameters); 25 26 $items = $response->body(); 27 $array = json_decode($items, true); 28 29 foreach ($array as $item) { 30 $item["id"]; 31 $item["title"]; 32 $item["likes_count"]; 33 $item["tags"]; 34 } 35                 usort($array, "sortLike"); 36 return view('api.second', ['array' => $array]); 37 } 38}

試したこと

クラスが呼び出せないためprivate,public,protectedなど試してみました。
またソート順にするためsortメソッドなども試してみました。

ご教授して頂けたら幸いです。

補足情報(FW/ツールのバージョンなど)

laravel8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

このコメントによれば、以下の様にすれば良さそうです。

php

1usort($array, array($this, "sortLike"));

投稿2021/10/27 17:31

melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

staticじゃなければ[$this,"コールバック"]、staticなら"self::コールバック"としてください

PHP

1class myclass { 2 private static function mycallback($x,$y){ 3 return $x-$y; 4 } 5 public function mysort1($arg){ 6 usort($arg,[$this,"mycallback"]); 7 return $arg; 8 } 9 public static function mysort2($arg){ 10 usort($arg,"self::mycallback"); 11 return $arg; 12 } 13} 14 15$a=new myclass; 16$b=[2,1,4,3]; 17$c=$a->mysort1($b); 18print_r($c); 19$d=$a->mysort2($b); 20print_r($d); 21$e=myclass::mysort2($b); //staticならインスタンスなしで静的コールできます 22print_r($e);

投稿2021/10/28 00:53

編集2021/10/28 00:57
yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問