8
$array = array(
    'vegs' => 'tomatos',
    'cheese' => false,
    'nuts' => 765,
    '' => null,
    'fruits' => 'apples'
);

var_dump(in_array(false, $array, true)); //returns true because there is a false value

in_arrayのみ、またはforeachではなく何かを使用して、配列に少なくとも1つの非false(string、true、int)値があるかどうかを厳密にチェックするにはどうすればよいですか?

var_dump(in_array(!false, $array, true)); //this checks only for boolean true values

var_dump(!in_array(false, $array, true)); //this returns true when all values are non-false
4

2 に答える 2

10

以下の実際の解決策

否定を正しい位置に置くだけです。

var_dump(!in_array(false, $array, true));

もちろん、これは配列に要素がまったく含まれていない場合にも当てはまります。したがって、必要なのは次のとおりです。

var_dump(!in_array(false, $array, true) && count($array));

編集:忘れてください、それは「配列には正確に偽ではない値のみが含まれている」ではなく、「配列には正確に偽ではない値が少なくとも1つ含まれている」という答えでした

実際の解決策:

var_dump(
  0 < count(array_filter($array, function($value) { return $value !== false; }))
);

array_filterすべての値が!== false空でない場合は、条件がtrueである配列を返します。

またはコメントで提案されているように簡略化:

var_dump(
  (bool) array_filter($array, function($value) { return $value !== false; })
);

もちろん、節boolで使用する場合は、キャスト先も省略できます。if

于 2013-02-12T16:44:57.753 に答える
0

in_arrayのみ、またはforeachではなく何かを使用して、配列に少なくとも1つの非false(string、true、int)値があるかどうかを厳密にチェックするにはどうすればよいですか?

これは不可能です:

  • 文字列:このデータ型には、ブール値(trueまたはfalse)やNULLなどではなく、任意の値を含めることができます。
  • INT:文字列と同じですが、不明なものをチェックする方法は?
  • ブール値:可能。
  • NULL:可能です。

次に、抽象(int)または(文字列)を使用しただけでは、INTおよびSTRINGデータ型を見つけることはできません。

編集:

function get_type($v)
{
    return(gettype($v));
}

$types = array_map("get_type", $array);

print_r($types);

結果:

Array
(
    [vegs] => string
    [cheese] => boolean
    [nuts] => integer
    [] => NULL
    [fruits] => string
)
于 2013-02-12T17:01:37.020 に答える