带sizeof的php三值if/else是否始终为false?
我在PHP中遇到了一个奇怪的(但希望是简单的失误)三元赋值问题。下面的$category设置为空,这意味着sizeof($data)的值为0。我的期望是它应该被指定为“测试类别”带sizeof的php三值if/else是否始终为false?,php,ternary,Php,Ternary,我在PHP中遇到了一个奇怪的(但希望是简单的失误)三元赋值问题。下面的$category设置为空,这意味着sizeof($data)的值为0。我的期望是它应该被指定为“测试类别” $data=array('Test Category'); $category= (sizeof($data)>0 ? trim($data[0]) : ''); 如果我改为执行以下操作,我将得到$category,其值为“Test category”,为什么三元运算符的工作方式不如下所示 if(sizeof(
$data=array('Test Category');
$category= (sizeof($data)>0 ? trim($data[0]) : '');
如果我改为执行以下操作,我将得到$category,其值为“Test category”,为什么三元运算符的工作方式不如下所示
if(sizeof($data)>0){
$category=trim($data[0]);
}
像这样检查
$data[0]
怎么样:
if(isset($data[0]) && !empty($data[0])){
$category=trim($data[0]);
}
您可以将其更改为三元,如下所示:
$category = (isset($data[0]) && !empty($data[0])) ? $data[0] : '';
像这样检查
$data[0]
怎么样:
if(isset($data[0]) && !empty($data[0])){
$category=trim($data[0]);
}
您可以将其更改为三元,如下所示:
$category = (isset($data[0]) && !empty($data[0])) ? $data[0] : '';
你写三元赋值失败了,看看括号
尝试:
$category=(sizeof($data)>0)?修剪($data[0]):''代码>如果编写三元赋值失败,请查看括号
尝试:$category=(sizeof($data)>0)?修剪($data[0]):''代码>如果数组的值为空,则表示得到与此相同的结果。下面是两个代码示例:
$data=array();
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; // output is no
另一个是:
$data=array('');
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; //output is empty. it wont show the 'no'
在您的案例中,检查测试类别是空值还是空代码:
$data=array('Test Category');
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; //output is Test Category
如果数组的值为空,则表示得到与此相同的结果,下面是代码的两个示例:
$data=array();
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; // output is no
另一个是:
$data=array('');
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; //output is empty. it wont show the 'no'
在您的案例中,检查测试类别是空值还是空代码:
$data=array('Test Category');
$category= (sizeof($data)>0 ? trim($data[0]) : 'no');
echo $category; //output is Test Category
$data
数组是否按预期工作:$category=(sizeof($data)>0?trim($data[0]):“”代码>为我工作,什么不为你工作?只是想确定一下,这就是你的代码吗?我的意思是,你在这里写的和实际的代码之间难道没有一点区别吗?因为这工作正常。我刚刚复制了您的代码并粘贴到我的编辑器中,它的工作情况与预期的一样$data
是一个数组吗?似乎工作正常:$category=(sizeof($data)>0?trim($data[0]):“”代码>为我工作,什么不为你工作?只是想确定一下,这就是你的代码吗?我的意思是,你在这里写的和实际的代码之间难道没有一点区别吗?因为这是按预期工作的。我刚刚复制了您的代码并粘贴到我的编辑器中,它的工作方式是acpectedIt,这是一个更好的答案。这三元代码可以工作,但问题仍然是为什么isset($data[0])&&!空($data[0]不同于sizeof($data)>0。为什么不同于count($data)>0,其中$data是一个大小为1的数组。@Nawan的回答似乎表明如果数组值在$data[0]中==''这与计算false有关吗?这里有一个演示帮助您理解。只需尝试创建一个空数组,您就会看到count
和sizeof
的结果为1,但我的代码中提到的条件不会导致true
。这是演示:这是更好的答案。这个三元组有效,但问题仍然存在,为什么isset($data[0])&&&!empty($data[0]不同于sizeof($data)>0。为什么不同于count($data)>0,其中$data是一个大小为1的数组。@Nawan的回答似乎表明,如果$data[0]中的数组值==''这与计算false有关吗?这里有一个演示帮助您理解。只需尝试创建一个空数组,您就会看到count
和sizeof
将给出结果为1,但我的代码中提到的条件不会导致true
。下面是演示: