2012-08-09 183 views
1

我對PHP有點新,我不確定這是使用還是氣餒或其他。我想知道PHP如何處理這種數組,以及我是否應該使用它。PHP關聯式的數組作爲鍵

該數組看起來像這樣。

$arr = [0x00010000 => $valueOne, 0x00020000 => $valueTwo] // and so on 

value變量代表單個數字,表示周圍的按鍵之間的某處。例如。 valueOne的範圍從0x00010000x0001FFF。該數組使用相同的模式展開,因爲需要更多的值。

謝謝!

回答

4

你在做什麼沒有問題,你只是使用數字索引數組,而不是使用十進制表示法來定義鍵,而是使用十六進制表示法。 PHP以相同的方式處理這兩種情況(十進制和十六進制)。

十進制以下是等價的:

[ 4096 => $valueOne, 8192 => $value ] 
+0

對於不使用十六進制有什麼好處嗎?是否有任何額外的處理?我正在使用它,因爲它使我更容易。 另外我猜主要問題不是關於十六進制符號,而是更多地設置一些關鍵的X,Y和Z,而不是0,1,2。 – SpaceFace 2012-08-09 17:42:35

+0

這兩種方法都沒有「優點」,而且極其微小(如果任何)額外處理。不要擔心這種方法會帶來額外的開銷 - 使用十六進制和十進制是兩種完全有效且可互換的方式來聲明數組中的鍵。 – nickb 2012-08-09 17:50:40

2

陣列總是在PHP關聯。除了方括號初始值設定項(這是僅限於PHP 5.4的語法,因此人們避免使用它)之外,沒有什麼特別奇怪的代碼。

有一點需要記住的是,foreach()會按順序返回項目。如果在某個時間後執行$ arr [0x00000010] = $ valueThree,它將不會出現在項目之前索引0x00001000。這種秩序的缺乏將使無法確定密鑰是否落在兩個密鑰之間。您需要使用kso​​rt()來保持項目的順序。

您可能更適合將範圍的開始和結束索引作爲值存儲在對象中。確定密鑰是否落入特定範圍的邏輯變得容易得多:

foreach($ranges as $range) { 
    if($value >= $range->start && $value < $range->end) { 
     return $range->value; 
    } 
}