带sizeof的php三值if/else是否始终为false?

带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(

我在PHP中遇到了一个奇怪的(但希望是简单的失误)三元赋值问题。下面的$category设置为空,这意味着sizeof($data)的值为0。我的期望是它应该被指定为“测试类别”

$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
。下面是演示: