1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのコールバックを使う関数(usort等)

Posted at

PHPのコールバック関数

phpのコールバックってほとんど使わないんですが、
usort (ユーザ定義のソート関数) でちょっと戸惑ったので覚書

まずは普通の書き方

  • usort($my_arr, 'my_sort');
例.
// オリジナルソート関数
function my_sort($a, $b){
  // ちなみに…
  // -1 を返すと $a のが配列の先に。1 を返すと $b が先にセットされます
  return ($a < $b) ? -1 : 1;
}

$my_arr = array(15, 2, 5, 7, 1, 9);
usort($my_arr, 'my_sort');

var_dump($my_arr); // 1, 2, 5, 7, 9, 15

Class内(別Classから呼び出す時)の書き方.

  • usort($my_arr, array($class, 'my_sort'));
例1.
class HogeClass {
  
  // オリジナルソート関数
  public function my_sort($a, $b){
    return ($a < $b) ? -1 : 1;
  }
}

class FugeClass {
  
  public function disp_sort(){
    $my_arr = array(15, 2, 5, 7, 1, 9);

    $cls = new HogeClass();
    usort($my_arr, array($cls, 'my_sort'));

    var_dump($my_arr); // 1, 2, 5, 7, 9, 15
  }
}

例2.
class HogeController extends Controller {
  
  // オリジナルソート関数
  public function my_sort($a, $b){
    return ($a < $b) ? -1 : 1;
  }

  public function disp_sort(){
    $my_arr = array(15, 2, 5, 7, 1, 9);
    usort($my_arr, array($this, 'my_sort'));

    var_dump($my_arr); // 1, 2, 5, 7, 9, 15
  }
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?