PHPコールバック関数を使用して配列内の要素をフィルタします.


PHP関数


array_filter

サマリ


コールバック関数を使用して配列内の要素をフィルタします.
関数プロトタイプ
 array_filter ( array $array , callable|null $callback = null , int $mode = 0 ) : array

パラメータ

  • $array重複する配列.
  • $callback使用するコールバック関数.
  • $modeコールバック関数に渡すパラメータ.
  • ARRAY_FILTER_USE_KEYの場合、値のない鍵のみが渡されます.
  • ARRAY_FILTER_USE_BOTHの場合、鍵と値が渡されます.

  • コンテンツを転送しない場合、または0を転送しない場合、値のみが転送されます.
  • 説明:


    PHP 4.0.6から提供されます.
    配列内の各値を繰り返し、コールバック関数に渡します.
    コールバック関数がtrueを返すと、配列の現在の値は結果配列を返します.
    配列キーが保持され、配列がインデックス化されている場合、鍵は並べ替えられません.

    array values()関数を使用して、結果配列を再インデックスできます。


    フィルタされた配列を返します.
    PHP 8.0バージョンから、$callbacknullとすることができる.
    PHP 5.6から$mode定数にARRAY_FILTER_USE_KEYARRAY_FILTER_USE_BOTHが追加された.
    コールバック関数が元の配列(要素の追加、削除、無効化など)を変更した場合、この関数の動作は保証されません.

    例1

    function odd($var)
    {
        // returns whether the input integer is odd
        return $var & 1;
    }
    
    function even($var)
    {
        // returns whether the input integer is even
        return !($var & 1);
    }
    
    $array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
    $array2 = [6, 7, 8, 9, 10, 11, 12];
    
    echo "Odd :\n";
    print_r(array_filter($array1, "odd"));
    echo "Even:\n";
    print_r(array_filter($array2, "even"));

    結果。

    Odd :
    Array
    (
        [a] => 1
        [c] => 3
        [e] => 5
    )
    Even:
    Array
    (
        [0] => 6
        [2] => 8
        [4] => 10
        [6] => 12
    )

    例2

    $entry = [
        0 => 'foo',
        1 => false,
        2 => -1,
        3 => null,
        4 => '',
        5 => '0',
        6 => 0,
    ];
    
    print_r(array_filter($entry));

    結果。

    Array
    (
        [0] => foo
        [2] => -1
    )

    例3

    $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
    
    var_dump(array_filter($arr, function($k) {
        return $k == 'b';
    }, ARRAY_FILTER_USE_KEY));
    
    var_dump(array_filter($arr, function($v, $k) {
        return $k == 'b' || $v == 4;
    }, ARRAY_FILTER_USE_BOTH));

    結果。

    array(1) {
      ["b"]=>
      int(2)
    }
    array(2) {
      ["b"]=>
      int(2)
      ["d"]=>
      int(4)
    }

    リファレンス


    https://phpman.ml/array_filter
    https://www.php.net/manual/en/function.array-filter.php

    Pythonコード

    def array_filter(array, callback=None):
        filter(callback, array)

    そうかんかんすう


    array_map
    array_reduce
    array_walk
    開発依頼を依頼したい場合は、FAQを読み、適切であれば[email protected]に連絡してください.