PHP:检查数组键是否有值

13

我有以下的数组($post_options),它可能以各种方式出现,关键是动态的:

可能是这样的:

array(1) { [95]=> string(2) "25" }

也可能是这样的,关键字可以是任何东西:

array(1) { [05]=> string(2) "" }

我想添加一个控制语句,根据第一个关键元素的值是否有值来进行控制。

我有这段代码:

if (!isset($post_options[0])) {
            // value is empty
            var_dump($post_options);
        }
        else {
            // value has value
            echo 'Option Selected';
        }

但是这并不起作用,当值被设置和未被设置时都返回true。有什么解决方案吗?谢谢

所以如果数组看起来像这样(第一个键的值为空):

array(1) {[05]=> string(2) ""}

我想在这种情况下使用var_dump();


能否详细解释一下?你想要什么,目前得到了什么? - jilesh
我认为尝试使用!empty()或empty()条件。 - jilesh
@jilesh 我尝试过了,但是没有成功,这个语句在这种情况下无论值是否有值都会返回true。 - Liam Fell
你的意思是值为空或非空都可以对吧? - jilesh
“具有值”是什么意思?您是指键必须存在于数组中吗?您是指该值不能为null吗?该值不应为空字符串吗?其他任何“空”值呢?这里有很多选项。您到底想要什么?请明确说明。 - Ken Wayne VanderLinde
4个回答

37

根据您的具体需求,有三种选择。

  1. array_key_exists($key, $array) 这是最简单的选项。如果数组有给定的键,则返回true;否则返回false

  2. isset($array[$key])array_key_exists更严格,因为它还要求分配给键的值不为null

  3. !empty($array[$key])(注意!)这是最严格的选项,因为它要求值不是任何空值(即不是nullfalse0'0'等)。

根据具体要求,还有其他选项。看起来您正在寻找!empty选项,因为它将(特别是)拒绝空字符串。


1
请注意,假设 $var = '',使用 isset($var) 将返回 TRUE,要测试空字符串,请确保使用 empty() - 参考:php doc - avn

7
如果您不知道数组的第一个键,则可以使用array_keys,例如,获取您的数组所有键。
$ar = array('95' => 'val');
$keys = array_keys($ar);
$first_item = $ar[$keys[0]]; 
var_dump($first_item);    // outputs: string(3) "val" 

另一个选择是使用current函数,它可以返回数组中当前元素。考虑到不需要移动数组指针,代码可以如下:

$ar = array('95' => 'new_val', '02' => 'val2');
$cur = current($ar);
var_dump($cur);  // outputs: string(7) "new_val" 

之后,您可以使用标准的empty函数进行检查:

if (empty($cur))

或者
if (empty($first_item))

1
尝试这个。
if (!isset($post_options[0])) {            // value is empty
    if(!empty($post_options[0])) {
          var_dump($post_options);          
    }           
}

1
对于值的空检查,我们需要使用 empty;对于数组是否存在的 isset 检查(如果您有没有值的键,则仅返回 true)。要检查数组中的值,我们需要使用 empty。 - Lohith

0

isset函数检查数组位置是否存在,而不是它包含或不包含值。

你最好看一下empty函数来完成这个任务。

if (empty($post_options[0])) {
    // value is empty
    var_dump($post_options);
} else {
    // value has value
    echo 'Option Selected';
}

希望这可以帮到你


isset 实际上检查键是否存在 不映射到 null - Ken Wayne VanderLinde
无论值是否设置,此函数都返回false。 - Liam Fell
如果函数无法正常工作,那么我恐怕你的数组元素不是空的。尝试打印两种情况下的元素并查看其值。 - ponciste

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接