2016-12-15 22 views
3

あなたは、単純なarray_filter()を介してそれらを渡すと、使用して、配列からNULL値を削除したい場合はisset()機能は素晴らしい選択肢のように思えるに建て:ISSET()

$dairyFree = true; 
$toppings = [ 
'tomato', 
'oregano', 
'pepperoni', 
($dairyFree) ? null : 'cheese', 
]; 

$toppings = array_filter($toppings, 'isset'); 

かなりシンプルですが、array_filter()isset()を使用すると、次の警告発生します

警告:array_filter()は、パラメータ2が有効なコールバック、関数「ISSET」が見つかりか無効ではない関数名であることを期待しています。

クロージャ内の同じコードをラップするのは簡単ですが、私の質問は - なぜstrlen()のような他の内部機能isset()機能で、ボークをPHPとはないでしょうか?

+0

あなたはissetを呼び出すカスタム関数を記述しなければなりません。 – Yoleth

+1

_これは**言語構成であり、関数**ではないため、可変関数を使用して呼び出すことはできません._または、関数が必要な場所で使用されます。 – AbraCadaver

答えて

8

issetはまったく関数ではなく、echoのような構成です。配列からnullの値を削除するだけの場合は、issetのパラメータは十分ではありません。

<?php 
    $dairyFree = true; 
    $toppings = [ 
     'tomato', 
     'oregano', 
     'pepperoni', 
     ($dairyFree) ? null : 'cheese', 
    ]; 
    $toppings = array_filter($toppings); 
    print_r($toppings); 
?> 

この出力:

Array 
(
    [0] => tomato 
    [1] => oregano 
    [2] => pepperoni 
) 
+5

array_filterのデフォルトの機能は、falseとほぼ同じ値を除外します。これは、null、false、0、または空の文字列を意味します。 – Devon

+0

@Devonはい、そうです。 ':D' –

+1

良い答えです。興味深いことに、これらの言語構造( 'list'や明らかに' isset'など)は関数としてドキュメントの下にあります。私の特定のアプリケーションでは、偽の値だけではなく、「ヌル」の値が欠落する必要がありました。 – jpschroeder

-1

方法について:

$toppings = array_filter($toppings, function($a){return isset($a);}); 

UPDATE:それを忘れて、あなたは、あなたの質問にこれに気づきました。