14
11

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.

array_filterのコールバック関数を使用する

Posted at

array_filter

コールバック関数を使用して、配列の要素をフィルタリングする
引用元:https://www.php.net/manual/ja/function.array-filter.php

  • 第三引数のflagを指定しない場合、第一引数に指定された配列のvalueをコールバック関数で使用する

コールバック関数

サンプルコード1

  • flgを指定しない場合
// 金額情報をもつ連想配列を定義する
$prices = [
    'priceA' => 100,
    'priceB' => 200,
    'priceC' => 300,
    'priceD' => 400,
    'priceE' => 500,
];

// 300円以上の値を取得する
$result = array_filter($prices, function($price) {
    return $price >= 300;
});

出力結果

[
	'priceC' => (int) 300,
	'priceD' => (int) 400,
	'priceE' => (int) 500
]

サンプルコード2

  • flgARRAY_FILTER_USE_KEYを指定した場合
// 金額情報をもつ連想配列を定義する
$prices = [
    'priceA' => 100,
    'priceB' => 200,
    'priceC' => 300,
    'priceD' => 400,
    'priceE' => 500,
];

// $pricesのkeyと"priceC"という文字列が一致する値を取得する
$result = array_filter(
    $prices,
    function($price) {
        return $price == 'priceC';
    },
    ARRAY_FILTER_USE_KEY
);

出力結果

[
	'priceC' => (int) 300
]

サンプルコード3

  • flgARRAY_FILTER_USE_BOTHを指定した場合
    • array_filterの第二引数に指定するコールバック関数の第一引数は、array_filterの第一引数($prices)の値を参照する
    • そのため、第二引数のコールバック関数に指定している引数の名前は、第一引数を**$valueとし、第二引数を$key**とした
// 金額情報をもつ連想配列を定義する
$prices = [
    'priceA' => 100,
    'priceB' => 200,
    'priceC' => 300,
    'priceD' => 400,
    'priceE' => 500,
];

// $pricesのkeyと"priceD"という文字列が一致し、かつ、valueの値が400の値を取得する
$result = array_filter(
    $prices,
    function($value, $key) {
        return $key == 'priceD' && $value == 400;
    },
    ARRAY_FILTER_USE_BOTH
);

出力結果

[
	'priceD' => (int) 400
]
14
11
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
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?