現在の位置: ホーム> 最新記事一覧> Array_filter()が0の値で要素を削除するのはなぜですか?

Array_filter()が0の値で要素を削除するのはなぜですか?

M66 2025-06-05

PHPでは、 array_filter()関数を使用して、アレイ内の要素をフィルタリングし、指定されたコールバック関数に従って要素を保持するかどうかを決定します。コールバック関数が指定されていない場合、 array_filter()はデフォルトのコールバック関数を使用して配列をフィルタリングします。 PHPの「false値」には、 falsenull0"" (空の文字列)、 array() (空の配列)、および0.0が含まれます。

したがって、phpでarray_filter()を使用すると、配列の要素値が0の場合、誤った値と見なされ、削除されます。この問題をよりよく理解するために、具体的な例を使用して、 array_filter()の動作を示すことができます。

例1: array_filter()デフォルト動作

<?php
$array = [0, 1, 2, 3, 0, 4, 5, 0];

$filtered = array_filter($array);

print_r($filtered);
?>

出力:

 Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [5] => 4
    [6] => 5
)

上記のコードでは、複数の0の要素を含む複数の整数を含む配列を作成します。 array_filter()を使用すると、 0がfalse値と見なされるため、値が0のすべての要素が削除されます。

なぜこれが起こっているのですか?

これは、 array_filter()関数のデフォルトの動作は、Arrayから「偽値」と見なされるすべての要素を削除することであるためです。 PHPのタイプ変換ルールは、 0がfalse値であると判断します。具体的には、 0falseに変換され、 false原因Array_filter()は要素を削除します。

値が0の要素を保持する方法は?

値が0の要素を保持したい場合は、カスタムコールバック関数を提供することでこれを行うことができます。例えば:

 <?php
$array = [0, 1, 2, 3, 0, 4, 5, 0];

$filtered = array_filter($array, function($value) {
    return $value === 0 || $value > 0;
});

print_r($filtered);
?>

出力:

 Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [5] => 4
    [6] => 5
    [7] => 0
)

この例では、カスタムコールバック関数を使用して、値が0の要素が保持され、他の要素がロジックに従ってフィルタリングされていることを確認します。

要約します

Array_filter()を使用する場合、値が0の要素が削除されます。PHPが0を偽値として扱うためです。コールバック関数がない場合、 array_filter()はこれらの誤った値を自動的に削除します。 0またはその他の特定の値を保持する必要がある場合は、フィルタリング動作を制御するためにカスタムコールバック関数を提供できます。