現在の位置: ホーム> 最新記事一覧> 空の文字列を無視する、0とnullはすべて「偽の値」として扱われます

空の文字列を無視する、0とnullはすべて「偽の値」として扱われます

M66 2025-06-05

PHPでは、 array_filterは、コールバック関数の返された結果に基づいてarrayをフィルタリングするための非常に実用的な関数です。デフォルトでは、コールバック関数が提供されていない場合、 array_filterは「falsy値」と見なされるすべての要素を削除します。これらの「偽の値」には次のものが含まれます。

  • 間違い

  • ヌル

  • 0 (整数)

  • '0' (文字列)

  • '' (空の文字列)

  • [] (空の配列)

これは、特に開発者が元々 nullまたは空の文字列を削除したい場合に、一部の開発者を混乱させる可能性がありますが、整数0でさえ一緒に削除されていることがわかりました。それで、なぜこれが起こっているのですか?もっと深く見てみましょう。

PHPにおける「偽値」の概念

PHPは弱いタイプの言語です。つまり、ブール操作を実行すると、特定のタイプをブール値に自動的に変換します。このメカニズムは、タイプジャグリングと呼ばれます。ブールのコンテキストでは、次の値はとして解釈されます。

 var_dump((bool) false);   // false
var_dump((bool) null);    // false
var_dump((bool) 0);       // false
var_dump((bool) '0');     // false
var_dump((bool) '');      // false
var_dump((bool) []);      // false

値がブール型とfalseに変換される限り、 array_filterはデフォルトでそれをフィルタリングします。

array_filterのデフォルト動作

array_filter関数プロトタイプは次のとおりです。

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array

2番目のパラメーター$ callbacknullの場合、 array_filterは実際には次のように機能します。

 $result = [];
foreach ($array as $key => $value) {
    if ((bool) $value) {
        $result[$key] = $value;
    }
}

例えば:

 $data = [0, 1, 2, null, '', 'hello', false];

$result = array_filter($data);

// 消す [1 => 1, 2 => 2, 5 => 'hello']

ご覧のとおり、 0null ' 、およびfalseはすべて「偽」と見なされるため、削除されます。

特定のタイプの値を除外する方法は?

null値をフィルタリングして0と空の文字列を保持するだけの場合、たとえばカスタムコールバック関数を渡すことができます。

 $data = [0, '0', '', null, false, 'PHP'];

$result = array_filter($data, function ($item) {
    return !is_null($item);
});

// それを保管してください 0、'0' そして ''

たとえば、空の文字列を削除するだけの場合:

 $result = array_filter($data, function ($item) {
    return $item !== '';
});

これにより、特定のニーズに応じて保持する必要がある値を慎重に制御できます。

実用的なシナリオの例

フォーム提出システムを構築していると仮定し、フロントエンドフォームがいくつかの空のフィールドを渡し、ユーザーが実際に記入したものだけを保持したいとします。

 $formData = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'website' => null,
];

$filtered = array_filter($formData, function ($value) {
    return $value !== '' && !is_null($value);
});

print_r($filtered);

出力結果:

 Array
(
    [name] => Alice
    [age] => 0
)

この結果では、空の文字列とnullが削除されますが、ユーザーが0歳で実際に埋められた可能性があるため、 0が保持されます。

まとめ

array_filterを使用する場合、PHPの「偽値」の概念を理解することが重要です。デフォルトでは、 nullまたは空の文字列だけでなく、boolean falseに相当するすべての値を削除します。より正確なフィルタリング動作が必要な場合は、常にカスタムコールバック関数を渡すことをお勧めします。

このようにして、ユーザーが記入する「0」の値など、誤って有効なデータを削除することを避けることができます。また、さまざまなビジネスシナリオに柔軟に対処することもできます。