2013-05-05 46 views
1

我使用is_array功能,但需要使用isset爲好,因爲如果沒有被選中,我得到一個未定義的索引錯誤結合。如何isset與is_array

我仍然在學習PHP所以不知道怎麼把我所用isset寫的,我的代碼如下

$special = $_POST['special']; 
if (is_array($_POST['special'])) { 
    $special = implode(",", $_POST['special']); 
} else { 
    $special = $_POST['special']; 
} 

非常感謝

+1

你在哪裏使用isarray? – Fabio 2013-05-05 20:17:19

+3

你想要做什麼? – Simone 2013-05-05 20:17:47

回答

2

您正嘗試是否設置或不的$_POST['special']值分配給$special。這就是你遇到錯誤的原因。以下可能的工作:

$special = ""; 
if (isset($_POST['special'])) { 
    if(is_array($_POST['special'])) { 
     $special = implode(",", $_POST['special']); 
    } else { 
     $special = $_POST['special']; 
    } 
} 

如果$_POST['special']是一個數組,它將使用破滅將其轉換爲字符串,並將其分配給$special

如果它不是一個數組,但仍設置,然後將值賦給$special

+1

非常感謝艾登,完美的工作 – user2224798 2013-05-05 20:29:27

+1

是的,是的,我知道,預優化是所有邪惡等等的根源,但我只是覺得在相同的變量上使用兩次'isset'是不好的做法。 – h2ooooooo 2013-05-05 20:41:21

0

您試圖分配$_POST陣列是否值它是否設置。如果設置了$_POST['special'],則告訴計算機,如果未設置,則將其分配給$special,如果未設置,則再次將其分配給$special。然後你得到那個錯誤。

你的if語句具有不平均。如果沒有價值$_POST[ 'special' ]存在

$special = ""; 
$pos = false; 
if (isset($_POST['special'])) 
{ 
    $pos = strpos($_POST['special'], ','); 
    if($pos !== false) 
    { 
     $special = implode(",", $_POST['special']); 
    } 
    else 
    { 
     $special = $_POST['special']; 
    } 
} 
0

你的第一行會拋出一個錯誤,因爲分配給$_POST[ 'special' ]$special假設有一個值。做你想要什麼樣的正確方法如下:

if (isset($_POST[ 'special' ])) 
    $special = implode(',', $_POST[ 'special' ]); 
else 
    $special = null; 

與上面的代碼,你可以稍後在腳本中檢查是否$specialnull使用進行嚴格比較。如果是,則未設置$_POST[ 'special' ]。否則,您可以假定它包含內爆的字符串值。

你可以,當然,添加更多的檢查,如確保該值不爲空爲好,等等。

4

你並不需要使用is_array,您可以強制所有內容是數組...

$special = isset($_POST['special']) ? $_POST['special'] : null; 
$special = implode(",", (array) $special); 
+2

簡單又容易。 +1 – zkanoca 2013-05-05 20:30:16