2013-03-16 144 views
0

當我運行這段代碼時,我得到了一個輸出I am a multidimensional array!(第一個塊)。我認爲它會進入第二塊,但它不會。我在這裏錯過了什麼?檢查一個值是否是一個多維數組

$values = array('1','2'); 
if(isset($values[0][0])){ 
    echo "I am a multidimensional array!"; 
}else{ 
    echo "I am not a multidimensional array."; 
} 
+0

如果我運行,我不會像你一樣... – apelsinapa 2013-03-16 23:02:02

+1

工程只是[罰款給我](http://codepad.org/gtcfK0iC)。 – hjpotter92 2013-03-16 23:02:17

+0

檢查[這個不錯的技巧](http://stackoverflow.com/a/994599/1401975)。順便說一下你的問題是重複的... – HamZa 2013-03-16 23:08:19

回答

3
$values = array(1,array(1,2)); 


$multi = false; 
if(is_array($values)){ 
    foreach($values as $k=>$v){ 
     if(is_array($v)){ 
      $multi = true; 
      break; 
     } 
    } 
} 

echo $multi ? "multi" : "not multi"; 
+0

該解決方案更好,因爲它將支持多於整數的鍵。 – apelsinapa 2013-03-16 23:08:39

+0

謝謝,我不得不修改它來處理我的代碼,因爲我需要數組中的所有值不僅僅是數組。但是這解決了問題! – 2013-03-16 23:20:54

3

試試這個:

if(is_array($values[0])) 

編輯:這將只檢查數組的第一個元素。你應該遍歷每個元素來檢查它是否真正的多維。

該代碼檢查數組的第一個元素是否也是一個數組。 isset只是檢查變量是否爲NULL

isset在您的示例中未按預期工作。也許PHP版本或設置之間的功能略有不同。我沒有看到在手冊中什麼,但也許你可以:

http://php.net/manual/en/function.isset.php

使用is_array是更多的語義,所以在我看來是一個更好的選擇。

+1

哦,但代碼爲我工作[這裏](http://codepad.org/gtcfK0iC)。 – hjpotter92 2013-03-16 23:03:00

+0

這很奇怪,但這個答案解決了我的問題。 – 2013-03-16 23:04:11

+0

也許'isset'在PHP版本之間有略微不同的功能。我匆匆瀏覽手冊,但沒有顯示出來。 – 2013-03-16 23:05:49

1

此代碼僅進入,如果分支對我來說,如果陣列中的第一個值顯式聲明爲一個字符串,

$values = array('1',2); 

- 與該行爲也不過是邏輯,因爲$values[0]是文本字面值'1',並且具有可以使用基於零的索引訪問的第一個字符。

所以我猜你的真的數據是一個字符串類型 - 或者它可能取決於PHP版本(我在5.3.16下測試)。

無論如何,使用is_array作爲已經建議的其他答案是正確的方式去這裏。

+0

啊是的!我在我的真實代碼中使用字符串作爲數組的第一個值。 – 2013-03-16 23:08:00

相關問題