Не все в програмуванні має просте рішення і часто доводиться шукати щось в багатовимірних асоціативних масивах, беручи до уваги не лише значення, а й те, до якого ключа воно належить.
array_filter() чимось нагадує in_array(), щоправда замість простого значення тут можна задавати складніші аргументи. Дивимось, що під капотом:
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
$array — наш масив.
$callback — працьовита функція для вилову інформації.
$flag — з чим ми працюємо: виключно з ключами результатів, чи обома значеннями.
А це просто шикарна конструкція, яка допомогла зекономити півдня
$my_array = ['foo' => 1, 'bar' => 'baz', 'hello' => 'wld']; $allowed = ['foo' => true, 'bar' => true, 'hello' => 'world']; $filtered = array_filter( $my_array, function ($val, $key) use ($allowed) { // N.b. $val, $key not $key, $val return isset($allowed[$key]) && ( $allowed[$key] === true || $allowed[$key] === $val ); }, ARRAY_FILTER_USE_BOTH ); // ['foo' => 1, 'bar' => 'baz']
Ресурси серверу такі конструкції не заощаджують, проте допомагають уникнути зайвих кілограмів коду.