2011-11-03 58 views
2

我遇到了一個奇怪的問題,其中一個數組。該陣列是這樣的話,我做的print_r()就可以了:isset在數組的父元素值爲字符串時返回true,數組

Array 
(
    [id] => 1688 
    [pCid] => 1992 
    [category] => 177 
    [archive] => 0 
    [catid] => 
    [pid] => 
    [order_nr] => 1 
    [cOrder] => 1 
    [cSeo] => no-colour 
    [order_id] => 0 
    [price] => 8.99 
    [sale_price] => 7.99 
    [sale_expiry] => 
    [oPrices] => 7.99 
    [member_price] => 6.99 
    [set] => 0 
) 

,當我做了simmple

當$數組[ '設置'] currentlly等於0
if(isset($array['set']['stock'])){} 

返回true 。

var_dump(isset($array['set']['stock'])) //bool(true) 

返回true

任何想法,爲什麼會出現這種情況?

我注意到,你可以複製同樣的問題是這樣的(我做is_array($陣列[「設置」])檢查,但仍然不知道爲什麼不工作的isset解決支票簽發):

<?php 
$colour = array(); 
$colour['set'] = '0'; 

var_dump(isset($colour['set']['stock'])); //will return true 
?> 
+0

isset當我運行上面的代碼時返回false。 – liquorvicar

+0

您使用的是什麼版本的PHP?我正在使用5.3.2,isset的行爲與預期相同。你也確定在進行isset檢查之前,數組的值不會改變嗎?也許你可以發佈一個更完整的代碼示例。 –

+0

我的PHP版本是「PHP Version 5.3.5」 – Alex

回答

1

一個字符串是一個字符數組。當比較['stock']數組時,它會比較第一個字符,因爲它正在查看一個字符串。

<?php 
$colour = array(); 
$colour['set'] = 'foo'; 

var_dump($colour['set']['stock']); // Returns 'f' 
?> 

例如返回'f'。

+0

感謝您的解釋。 – Alex

-1

isset()檢查特定的變量或數組元素是否存在。包含任何東西的變量/元素,包括null0仍然設置,因爲它存在。如果你想檢查非零內容,則使用empty()代替,如果變量存在但是包含'',null,0,'0'等等,那麼將返回true。但是,仍然需要執行isset測試,因爲如果嘗試在真正不存在的數組鍵上運行它,empty()將觸發「no such array key」警告。

0

在PHP中(與其他大多數語言一樣),字符串可以作爲字符數組訪問。

所以當你做$str['stock']你真的在$str訪問'stock'偏移量。由於字符串只有數字偏移量,所以字符串'stock'被轉換爲整數,因爲它不包含任何數字,結果爲0。因此,您訪問$str[0],這是字符串的第一個字符,它被設置。

相關問題