LoginSignup
2
0

More than 3 years have passed since last update.

配列の要素をフィルタリング(array_filter, array_reduce)

Last updated at Posted at 2019-11-24

配列の要素をフィルタリングする(array_filter, array_reduce)

次のような連想配列からvalueが偶数の要素のみを取り出します。

index.php
$array = [
    [ 'number' => 1 ],
    [ 'number' => 2 ],
    [ 'number' => 3 ],
    [ 'number' => 4 ],
    [ 'number' => 5 ],
    [ 'number' => 6 ],
    [ 'number' => 7 ],
    ];

こちらを一旦var_dump()しておきます。

index.php
array(7) {
  [0]=>
  array(1) {
    ["number"]=>
    int(1)
  }
  [1]=>
  array(1) {
    ["number"]=>
    int(2)
  }
  [2]=>
  array(1) {
    ["number"]=>
    int(3)
  }
  [3]=>
  array(1) {
    ["number"]=>
    int(4)
  }
  [4]=>
  array(1) {
    ["number"]=>
    int(5)
  }
  [5]=>
  array(1) {
    ["number"]=>
    int(6)
  }
  [6]=>
  array(1) {
    ["number"]=>
    int(7)
  }
}

このような構造の配列になっております(添字に注目)

まずはarray_filter()を使ってvalueが偶数の物を取り出していきましょう。

array_filter()

index.php
$array_even = array_filter($array, function ($int) {
    return $int['number'] % 2 === 0;
});

こちらをvar_dump()してみます。

index.php
array(3) {
  [1]=>
  array(1) {
    ["number"]=>
    int(2)
  }
  [3]=>
  array(1) {
    ["number"]=>
    int(4)
  }
  [5]=>
  array(1) {
    ["number"]=>
    int(6)
  }
}

うまく取り出せました。
添字を見てみると、$arrayの添字がそのまま使われています。
こちらがarray_filter()の挙動です。

続いてarray_reduce()を使って同様の処理を行っていきます。

array_reduce()

index.php
$array_even = array_reduce($array, function ($number, $int) {
    if ($int['number'] % 2 === 0) {
        $number[] = $int;
    }
    return $number;
});

こちらをvar_dump()してみると

index.php
array(3) {
  [0]=>
  array(1) {
    ["number"]=>
    int(2)
  }
  [1]=>
  array(1) {
    ["number"]=>
    int(4)
  }
  [2]=>
  array(1) {
    ["number"]=>
    int(6)
  }
}

array_filter()と同様にvalueに偶数を持つ要素を取り出すことができました。
添字を見てみると、添字がリセットされ0-basedな配列になっています

単に配列をフィルタリングする際には、array_filter()を、添字も使用する処理ならばarray_reduce()を使用すると良いでしょう

追記:array_filter()してarray_values()してもo-basedな配列にすることができます。

以上が配列をフィルタリングする際のarray_filter()array_reduce()の挙動の違いでした。
ご閲覧ありがとうございました。

2
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
2
0