array_filter()は、PHPで非常に一般的に使用されている機能であり、コールバック関数に基づいて配列内の要素をフィルタリングするために使用されます。 arrayをarray_filter()に渡すと、配列を繰り返し、どの要素が保存され、どの要素が提供されるコールバック関数の返品値に基づいて削除されるかを決定します。 Array_filter()のアプリケーションのほとんどは、単純な配列の処理に焦点を当てていますが、オブジェクトを含む配列に適用されると、動作には特別なものがいくつかあります。
まず、次のように定義されているarray_filter()の基本的な使用法を見てみましょう。
array_filter(array $array, callable $callback = null, int $mode = 0): array
$配列:フィルターする入力配列。
$ callback :コールバック関数各要素が基準を満たしているかどうかを判断します。
$モード:このパラメーターは、返された配列のキー値が保持されているか再特定されているかを決定します。
コールバック関数が提供されていない場合、 array_filter()は、 falseの値で配列内のすべての要素を削除します。
$array = [0, 1, 2, 3, 4, 5];
$result = array_filter($array);
// 出力 [1, 2, 3, 4, 5]
配列内の要素がオブジェクトである場合、 array_filter()は通常の配列を扱うときと同じように機能しますが、コールバック関数は各オブジェクトを引数として受信します。したがって、コールバック関数では、オブジェクトの属性に基づいてオブジェクトを保持するかどうかを決定できます。
複数のユーザーオブジェクトを含む配列があるとし、各ユーザーオブジェクトには名前と年齢のプロパティがあるとします。 18歳以上のユーザーを除外したいと考えています。
class User {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$users = [
new User('Alice', 25),
new User('Bob', 17),
new User('Charlie', 30),
new User('David', 15)
];
$filteredUsers = array_filter($users, function($user) {
return $user->age > 18;
});
foreach ($filteredUsers as $user) {
echo $user->name . " is over 18 years old.\n";
}
Alice is over 18 years old.
Charlie is over 18 years old.
上記の例では、コールバック関数を介して18歳以上のユーザーを除外します。コールバック関数は、ユーザーオブジェクトをパラメーターとして受け入れ、オブジェクトが$ user-> ageを通じて条件を満たしているかどうかを決定します。
オブジェクトがarray要素である場合、 array_filter()はオブジェクト全体をコールバック関数に渡します。 PHPでは、オブジェクトの比較は通常参照によって行われるため、オブジェクトのプロパティを比較する場合は、コールバック関数のオブジェクトのプロパティを明示的に抽出する必要があります。
また、名前に特定の文字が含まれているオブジェクトをフィルタリングすることもできます。たとえば、名前に「A」という文字が含まれているユーザーのみを除外したいと考えています。
$filteredUsers = array_filter($users, function($user) {
return strpos($user->name, 'a') !== false;
});
foreach ($filteredUsers as $user) {
echo $user->name . " has an 'a' in their name.\n";
}
Alice has an 'a' in their name.
Charlie has an 'a' in their name.
この例では、ユーザーの名前にstrpos()関数を介した文字「a」が含まれているかどうかを確認します。
array_filter()がオブジェクト配列を処理する場合、配列内の各オブジェクトの要素が参照によって渡されることに注意する必要があります。コールバック関数のオブジェクトのプロパティを変更すると、これらの変更は元の配列のオブジェクトに影響します。これは、PHPオブジェクトが参照によって渡されるためです。
$filteredUsers = array_filter($users, function($user) {
if ($user->age > 18) {
$user->age += 1; // オブジェクトのプロパティを変更します
return true;
}
return false;
});
foreach ($filteredUsers as $user) {
echo $user->name . " is now " . $user->age . " years old.\n";
}
Alice is now 26 years old.
Charlie is now 31 years old.
この例では、コールバック関数を通じて18歳以上のユーザーの年齢属性を変更し、この変更は元の配列に影響します。
オブジェクトの配列で作業している場合は、URLを使用する必要がある場合があります。たとえば、URLに特定のドメイン名を含むオブジェクトをフィルタリングする必要がある場合があります。 URL処理がコールバック関数に関与している場合、ドメイン名をM66.netに置き換えることを確認するだけです。
ユーザーの個人Webサイトを表すWebサイト属性がオブジェクトにあるとしたら、次の方法でそれをフィルタリングできるとします。
関連タグ:
array_filter