2013-01-18 49 views
-1

可能重複:
PHP Arrays: A good way to check if an array is associative or numeric?PHP:確定參數類型

我的一個函數的一個參數採用下列類型的值:

null, 

'*','', 

array('domain1','domain2'), 

array('domain1'=>'*','domain2'=>'group1','domain3'=>array('group1','group2')), 

我有,而問題我試圖確定參數的類型。特別是在確定它是否是一個數組及其關鍵參數時。

我該如何確定參數類型?

+1

is_null(),is_array()等 –

+0

@MarcB - 這不會告訴你它是否是一個關聯數組。 –

+0

@MarcB--這不會幫助他將陣列1與陣列2區分開來,這是他主要關心的問題。 – Spudley

回答

0

你可以使用is_array函數來確定參數是否是一個數組。你能給我們你的代碼給出更多的細節嗎?

0

PHP gettype函數應該做你想做的。爲了檢查特定類型,您可以使用is_array等is_ *函數。你可以找到關於他們的信息here

0

Php有這麼多的功能。

Here是這些搜索的大多數(如果不是全部)。

您將使用主要是與isis_array()is_null()isset()

0

如果你想確定型容易的襯墊啓動功能,你可能不希望在所有使用數組爲。您可能會發現將數據填充到特定類的對象中會更有用。

然後,您可以使用instanceofis_a()測試對象類型。

使用對象還可以使您能夠爲數據結構提供附加功能。它仍然可以作爲一個數組(例如與foreach()等),通過使其成爲一個迭代器。

如果您更願意堅持使用數組,並且您想區分鍵控數組和數組,您可以檢查this question的答案。

最好的答案出現了大意如下的一個簡短的函數:

function array_isassoc(array $array) { 
    return array_keys($array) !== range(0,count($array)-1); 
} 

這將返回true爲一個數值數組鍵控陣列或false

這可能是你可以使用的最可靠的方法,儘管如果你有一個數組數組並且不需要重新編號鍵,它就會停止工作。

+0

array_isassoc()函數不適用於具有非連續鍵的枚舉數組 - 如果序列中存在任何空位,它將失敗 –

+0

@MarkBaker - 爲什麼我們再次進行此對話?去bash [原始答案](http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check-if-an-array-is-associative-or-numeric#answer- 173479),並將此問題標記爲重複。哦,當你在那裏,你可以upvote [正確答案](http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check-if-an-array-是相聯 - 或數字/ 4254008#4254008)。 –

+0

@JosephSilber - 爲了公平起見,我確實聲明,我的首選解決方案不是使用數組,而是恰當考慮的類結構。這不是對另一個問題的回答,因爲另一個問題更直接。我只是爲了完整性而添加了答案的一部分,而且當我這樣做時,我確實引用了前面的問題。 (說了這麼多,我的猜測是,OP將採用這種類型的解決方案,而不是重做所有的東西來使用對象;如果他幾乎可以工作,它可能是更實用的選擇) – Spudley