現在の位置: ホーム> 最新記事一覧> array_filter()が予想どおりにフィルタリングされない場合はどうすればよいですか?

array_filter()が予想どおりにフィルタリングされない場合はどうすればよいですか?

M66 2025-06-05

PHPでは、 array_filter()関数を使用して、コールバック関数を介して配列要素をフィルタリングします。この関数を使用すると、配列を繰り返し、コールバック関数の戻り値に基づいて要素を保持するかどうかを決定します。コールバック関数がtrueを返すと、要素が保持されます。 falseの場合、要素は除外されます。
ただし、 array_filter()が機能しないように見える場合があり、結果が期待と矛盾することがあります。次に、いくつかの一般的な問題と解決策について説明します。

1.コールバック関数の返品値は期待を満たしていません

array_filter()で使用されるコールバック関数は、ブール値を返す必要があります。コールバック関数がnullfalse 、またはその他のfalse値を返す場合、要素は除外されます。 trueが返された場合、要素は保存されます。 array_filter()が期待どおりに機能していないことがわかった場合、コールバック関数の返品値を確認することが非常に重要です。

例の質問:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    if ($value % 2 == 0) {
        return 1;  // ここに戻るはずです true,その代わり 1
    }
    return false;
});
print_r($result);

回避策:コールバック関数が、別の値ではなく、ブール値またはfalseを返すことを確認してください。

修正コード:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // ブール値を返します true または false
});
print_r($result);

2。コールバック関数のパラメータータイプが正しくありません

コールバック関数の予想されるパラメータータイプが、実際に渡された配列要素のタイプと一致しない場合、要素が正しくフィルタリングされない可能性があります。たとえば、コールバック関数が整数値を受信することを期待する場合、実際に文字列または他のタイプのデータを渡しています。

例の質問:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // ここ $value それは文字列です,予期しない結果を引き起こします
});
print_r($result);

解決策:キャストを使用するか、配列の要素タイプがコールバック関数の要件と一致することを確認してください。

修正コード:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return (int)$value % 2 == 0;  // 整数にキャスト
});
print_r($result);

3。空の配列または空の値の処理

array_filter()は、デフォルトでアレイ内のすべてのfalse値( nullfalse 、空の文字列など)をフィルタリングします。配列にnull値がある場合、フィルタリングの結果が予想よりも悪化する可能性があります。

例の質問:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr);
print_r($result);  // ここでろ過されます 0、null、false そして空の文字列

解決策: 0またはfalseのような値を保持する場合は、カスタムコールバック関数を渡すか、 array_filter_use_use_bothフラグを使用してフィルタリング方法を制御できます。

カスタムコールバック関数のコード:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr, function($value) {
    return $value !== null;  // 予約する null 以外の値
});
print_r($result);

4.配列の参照を変更します

array_filter()は、元の配列を変更する代わりに新しい配列を返します。元の配列を変更するには、参照の合格またはその他の方法が必要です。元の配列を直接操作する場合は、 array_walk()またはその他の機能を使用できます。

例の質問:

 $arr = [1, 2, 3, 4, 5];
array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // 元の配列は変更されていません

解決策:元の配列を変更する場合は、 array_walk()を使用するか、値を直接再割り当てすることができます。

修正コード:

 $arr = [1, 2, 3, 4, 5];
$arr = array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // 変更された配列を直接返します

5。誤用array_filter()パラメーター

array_filter()を使用すると、2番目のパラメーターがフィルタリング基準を指定できます。デフォルトでは、コールバック関数を使用して要素をフィルタリングします。ただし、このパラメーターが誤用されている場合、問題につながる可能性もあります。

例の質問:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, 1);  // 数値を誤って使用しました 1
print_r($result);

解決策: 2番目のパラメーターが有効なコールバック関数であることを確認してください。

修正コード:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // コールバック関数を正しく使用します
});
print_r($result);