[英]How to check if an associative array has an empty or null value
在下面的關聯數組中
$array = array(
[0] => 0
[1] => 1
[2] =>
[3] => 2
[4] =>
)
如何確定給定鍵是否具有空(或空)值? 我用了
if(empty($array[$value]))
和
if(isset($array[$value])) && $array[$value] !=='')
當使用empty
時,第一個數組值也為false
,它是零,而isset
似乎沒有用。
使用array_key_exists()
和is_null()
。 如果密鑰存在並且其值遠離NULL
,則它將返回TRUE
區別:
$arr = array('a' => NULL);
var_dump(array_key_exists('a', $arr)); // --> TRUE
var_dump(isset($arr['a'])); // --> FALSE
所以你應該檢查:
if(array_key_exists($key, $array) && is_null($array[$key])) {
echo "key exists with a value of NULL";
}
看着所有答案,我不喜歡他們。 這不是更簡單,更好嗎? 這就是我正在使用的:
if (in_array(null, $array, true) || in_array('', $array, true)) {
// There are null (or empty) values.
}
請注意,將第三個參數設置為true意味着嚴格比較,這意味着0將不等於null - 但是,也不會清空字符串('') - 這就是為什么我們有兩個條件。 不幸的是,in_array中的第一個參數必須是一個字符串,不能是值數組。
PHP 空返回值狀態:
如果var存在且具有非空的非零值,則返回FALSE。 否則返回TRUE。
以下內容被認為是空的:
“”(空字符串)
0(0為整數)
0.0(0作為浮點數)
“0”(0作為字符串)
空值
假
array()(一個空數組)
是$ var; (聲明的變量,但沒有值)
從你的數組示例中我可以將它作為整數排除0 。 如果是這樣的話就可以解決這個問題:
<?php
$array = array(0, 1, '', 2, '');
foreach ($array as $value) {
echo (empty($value) && 0 !== $value) ? "true\n" : "false\n";
}
如果你想排除其他條件,那么empty
認為只是在那種情況下否定它們。 請注意,如果要檢查其他值,這可能不是最佳解決方案。
if ( !isset($array[$key]) || $array[$key] == "" || is_null($array[$key]) )
{
//given key does not exist or it has "" or NULL value
}
foreach($array as $i => $v) {
if(null === $v) {
// this item ($array[$i]) is null
}
}
......或者,對於給定的密鑰:
if(null === $array[2]) {
// this item ($array[2]) is null
}
如果我知道數組是如何構造的,這可能會更清晰,但是,假設你可以同時擁有空字符串或數組中的空值,並且你想要考慮0的值 - >這就是我的意思做:
if (is_null($array[$key]) || (string)$array[$key] == '')
這里有一些測試代碼,它顯示了一個包含0,null,空字符串和非零整數的數組的動作...
$array = array(0,1,null,2,'');
print_r($array);
foreach ($array as $key => $val) {
if (is_null($array[$key]) || (string)$array[$key] == '') {
echo $key.", true\n";
}
}
至於使用isset() - 考慮設置一個空字符串。 這可能是你遇到的(除了0被認為是空的)與這種用法比較:
$foo = array(0,1,null,2,'');
print_r($foo);
foreach ($foo as $key => $val) {
if (isset($foo[$key])) {
echo $key.", true\n";
}
}
function is_empty($data){
$is_empty = true;
foreach ($data as $val){
if(is_array($val)){
$is_empty = is_empty($val);
}else{
if(!empty($val)){
$is_empty = false;
break;
}
}
}
return $is_empty;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.