2

我的一个阵列遇到了一个奇怪的问题。数组看起来像这样,然后我对其执行 print_r() :

Array
(
    [id] => 1688
    [pCid] => 1992
    [category] => 177
    [archive] => 0
    [catid] => 
    [pid] => 
    [order_nr] => 1
    [cOrder] => 1
    [cSeo] => no-colour
    [order_id] => 0
    [price] => 8.99
    [sale_price] => 7.99
    [sale_expiry] =>
    [oPrices] => 7.99
    [member_price] => 6.99
    [set] => 0
)

当我做一个简单的

if(isset($array['set']['stock'])){}

当 $array['set'] 当前等于 0 时,它返回 true。

var_dump(isset($array['set']['stock'])) //bool(true)

返回真

任何想法为什么会发生这种情况?

(我通过执行 is_array($array['set']) 检查解决了检查问题,但仍然不确定为什么 isset 不起作用)

我注意到您可以像这样复制相同的问题:

<?php
$colour = array();
$colour['set'] = '0';

var_dump(isset($colour['set']['stock'])); //will return true
?>
4

3 回答 3

1

字符串是一个字符数组。当比较 ['stock'] 数组时,它会在查看字符串时比较第一个字符。

<?php
$colour = array();
$colour['set'] = 'foo';

var_dump($colour['set']['stock']); // Returns 'f'
?>

例如,返回“f”。

于 2011-11-03T14:52:19.183 回答
0

在 PHP(与大多数其他语言一样)中,字符串可以作为字符数组访问。

因此,当您这样做时,$str['stock']您实际上是在'stock'访问$str. 由于字符串只有数字偏移量,因此字符串'stock'被转换为整数,并且由于它不包含任何数字,因此结果为0. 因此,您访问$str[0],这是设置的字符串的第一个字符。

于 2011-11-03T14:51:26.683 回答
-1

isset() 检查特定变量或数组元素是否存在。包含 ANYTHING 的变量/元素,包括 anull或 a0仍然设置,因为它存在。如果要检查非零内容,请改用,如果变量存在但包含, , ,等empty(),它将返回 true ... 但是,您仍然需要进行 isset 测试,因为 empty( ) 如果您尝试在真正不存在的数组键上运行它,将触发“没有这样的数组键”警告。''null0'0'

于 2011-11-03T14:51:13.430 回答