我有一個函數,它必須接受一個點數組或一個點數組(一個2或3維數組)的數組。我正在尋找一種可靠的方法來檢測它是否有2或3級。關鍵是,我不能指望在陣列上的按鍵做檢查,所以這不會工作:如何正確計算數組中的級別數量?
$levels = isset($array[0][0]) && is_array($array[0][0]) ? 3 : 2;
..as第一關鍵可能不是0它通常是,但我不我不想依賴這個。無論如何,這是一個蹩腳的和非常謹慎的方式來做到這一點。最好,我想檢查任何數量的水平沒有必須遍歷整個陣列。
這裏的陣列可能是什麼樣子:
array(5) {
[2] => array(2) {
[x] => 3
[y] => 6
}
[3] => array(2) {
[x] => 4
[y] => 8
}
...
和三維陣列將包含這些陣列。
一些注意事項:
- 數組是很大,所以通過陣列完全循環是不是一個很好的選擇
- 的陣列數字和順序索引(與最後一個級別的例外,已經x和y)
- 數組鍵可能會或可能不會從0
在寫這開始,我提出了這可能是可行的解決方案;一個遞歸函數,檢查數組的第一項,如果是,則調用它自己的新發現數組等。
有沒有更好的,更清晰的想法?用於支持可能同時具有標量值和數組的數組的附加點(例如,數組的第一項可能是字符串,但下一個是數組)。
我不認爲有任何其他方式,因爲PHP數組實際上是作爲樹實現的,而不是數組,所以它不知道數組中有多少「層」。 – 2009-12-23 07:53:39