2011-01-09 47 views
-4

有許多 - 好的和不太好的方法來檢查關聯數組,但是如何檢查一個「完全關聯」的數組?PHP〜如何測試一個完全關聯的數組

​​

這裏$ john是完全關聯的,$ mary1和$ mary2不是。

+4

你是什麼意思與檢查聯合數組?你的意思是所有的值都有一個指定的鍵? – alexn 2011-01-09 17:09:20

+0

你是什麼意思「檢查」?你想知道數組是否只包含關聯關鍵字?你想循環關聯數組並檢查值嗎?我不知道你在這裏問什麼。 – dqhendricks 2011-01-09 17:10:53

+0

我沒有看到`$ john`和`$ mary1`之間的區別。 – 2011-01-09 17:11:21

回答

2

爲了簡短起見,不能因爲每個數組都以相同的方式實現。從docs

PHP中的數組實際上是一個有序的地圖。地圖是一種將值與鍵關聯的類型。

如果有在執行沒有洞察,但我敢肯定,array(1,2,3)array(0=>1, 1=>2, 2=>3)它是完全一樣的剛剛結束的簡寫,即。沒有什麼可以區分的。

你只能假設是通過array(value, value,...)創建的陣列中有0索引和其他人沒有。但你已經看到,這不一定總是如此。

而每一次檢測「關聯」數組的嘗試都會在某個時候失敗。

實際的問題是:爲什麼你需要這個嗎?

1

這是你在找什麼?

<?php 
function is_assoc($array) { 
    if(!is_array($array) || array_keys($array) == range(0, count($array) - 1)) { 
     return(false); 
    } 
    foreach($array as $value) { 
     if(is_array($value) && !is_assoc($value)) { 
      return(false); 
     } 
    } 
    return(true); 
} 
?> 

該檢測取決於您關聯的定義。此函數檢查關聯,這意味着沒有順序數字鍵的數組。有人可能會說聯想是關鍵是隱式設置而不是由php計算的任何東西。其他人甚至可能將所有PHP陣列定義爲關聯(在這種情況下,is_array()就足夠了)。再次,這一切都依賴於,但這是我在我的項目中使用的功能。希望這對你來說已經夠好了。