PHP - 空数组

12

(array)$someemptyvariablethatisnotarray 返回的是 array([0] =>) 而不是 array()

当我在 foreach() 中使用一个空数组时,如何使它返回一个未迭代的空数组呢?


3
如果你使用 var_dump() 而不是 print_r(),它会显示数组中的值的类型! - powtac
8个回答

25
$var = array();

这将清空一个数组。这是你想要的吗?


19
你正在使用的功能被称为"类型转换",这意味着将一个变量强制转换成给定的类型,在你的例子中是一个数组。在PHP中,变量如何转换并不总是显而易见的!
在你的例子中,$someemptyvariablethatisnotarray 变成了一个带有一个NULL值的数组。 PHP文档说:

自动转换为数组的行为目前未定义。

为了解决你的代码问题,我建议像这样做:
if (!is_array($someemptyvariablethatisnotarray) {
    $someemptyvariablethatisnotarray = array();
}

1
http://www.php.net/manual/en/language.types.array.php#language.types.array.casting - gen_Eric
2
如果你将NULL强制转换为数组,它将变成一个空数组;如果你将标量值(即使是空字符串,因为它不是NULL)强制转换为数组,它将变成一个带有该值的数组,而不是NULL值。 - gen_Eric

4
if(!$variable){
        return array();
}

3

你好吗?

我相信这就是您想要的:

$something = false;
foreach((array)(empty($something) ? null : $something) as $k){
    echo 'never enters here';
}

当你设置"(array)false"时,你不会得到一个空数组,因为它意味着你将会有一个单一的元素,并且这个元素将被赋予"FALSE"值。

对于一个空字符串(不是null),(array)$emptystring将返回一个包含单一元素的数组,该元素是一个空字符串!

类似于执行以下操作:

array('');

希望能帮到您。
祝好!

3
$somevar = empty($somevar) ? array() : (array)$somevar;

也许吗?虽然我不确定演员阵容或目的。能否再详细解释一下(例如你想要实现什么样的例子)?

我正在使用类似于foreach((array)$something as $k)...的语法。有时候$something可能是“false”而不是一个数组,所以我不希望foreach迭代它。 - Alex
@Alexandra:我知道PHP很灵活,但如果你发现你的变量在转换数据类型时出现问题,应该在其他地方进行检查以捕获它(换句话说,不要依赖强制转换)。我要冒昧猜测这可能与数据库有关,是一个可能返回FALSE的fetch row导致你无法迭代元素,对吗? - Brad Christie
是的 :) 我讨厌为每件小事做检查,但我想在这里我别无选择。 - Alex
@Alexandra:我建议使用 while (($row = mysql_fetch_array($result)) !== false){ ... }。这仍然是一个“检查”。;-) - Brad Christie

3
尝试使用unset($someemptyvariablethatisnotarray[0]) :)

2
当您将非数组变量强制转换为数组时,它会创建一个以该变量作为唯一值的数组。
如果您想要一个空数组,您需要返回array()

0

只需使用count(),例如:if(count($array) == 0 ){ // 空数组 }


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