2017-08-07 43 views
0

我有一個奇怪的,(但希望簡單的思念)與PHP中的三元賦值問題。在$ category下面設置爲空白,這意味着sizeof($ data)將評估爲0.我的期望是它應該被分配'測試類別'。php ternary if/else sizeof總是false?

$data=array('Test Category'); 
$category= (sizeof($data)>0 ? trim($data[0]) : ''); 

如果我不是這樣做時,我得到一個值「測試類別」 $類,爲什麼不三元運算符的工作如下?

if(sizeof($data)>0){ 
    $category=trim($data[0]); 
} 
+0

'$ data'是一個數組? –

+3

似乎按預期方式工作:https://eval.in/842312 – George

+0

如果使用if($ data){}或if(!empty($ data)) – AAT

回答

2

如何檢查$data[0]這樣的:

if(isset($data[0]) && !empty($data[0])){ 
    $category=trim($data[0]); 
} 

您可以按如下改變這三元:

$category = (isset($data[0]) && !empty($data[0])) ? $data[0] : ''; 
+0

這是更好的答案。 – Pupil

+0

這個三元組工作,但問題仍然是爲什麼isset($ data [0])&&!empty($ data [0]與sizeof($ data)> 0不同)和爲什麼不同於count($ data)> 0其中$ data是大小爲1的數組。@ Nawan的答案似乎表明,如果$ data [0] ==''中的數組值與評估false有關? – Ross

+0

這裏是一個演示幫助你理解,試着創建一個空數組,然後你會看到'count'和'sizeof'會給出1的結果,但是我的代碼中提到的條件不會導致爲'true'。這裏是demo:https:// 3v4l.org/AJTlF –

0

你沒有寫你的三元assignement,看看你的括號。

嘗試:$category= (sizeof($data)>0) ? trim($data[0]) : '';

+1

它對我沒有任何括號。 –

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