😺

PHP array_filterでスコープ外の変数を渡す

2022/03/14に公開

はじめに

配列の中身一つずつに関数処理を行い、フィルタリングしようとした際、外部の変数をどのように持ってくるか迷ってしまい、公式のマニュアルにも具体的には記載がなかったので、ここで記載しておきます。

array_filter

array_filter — コールバック関数を使用して、配列の要素をフィルタリングする

PHPマニュアル

例文

function roleCheck($person)
{
  if($person === "CEO"){
    return true;
  }
}

$array = ["staff", "orner", "CEO"];

$role = array_filter($array, "roleCheck");
print_r($role);


// 出力結果
Array
(
    [2] => CEO
)

上記のarray_filterによって、スタッフが入った配列一つ一つを、開裂を確認する関数を当てることでフィルタリングすることができる。

別の書き方

$array = ["staff", "orner", "CEO"];

$role = array_filter($array, function($person){
return ($person === "CEO");
});
print_r($role);

// 出力結果
Array
(
    [2] => CEO
)

関数に切り出さず、コールバック関数で記述することで、大分スッキリしました。

(本題)array_filterでスコープ外の変数を渡す場合

$array = ["staff", "orner", "CEO"];
$authority = "CEO";

$role = array_filter($array, function($person) use ($authority){
return ($person === $authority);
});
print_r($role);

// 出力結果
Array
(
    [2] => CEO
)

このようにarray_filterの中で、別の変数を使いたい時はuseの後に変数を記載することで、この関数内で変数を使用することができる。

さいごに

array_filterの使い方の問題というよりかは、関数のスコープ周りの理解の問題でした。

Discussion