2011-06-16 49 views
0

我使用jQuery自動完成(http://code.google.com/p/jquery-autocomplete/)和有一些問題,當我使用數組生成的數組MySQL調用。使用字符串在PHP中創建的數組與在循環中創建一個數組之間有基本的區別嗎?PHP數組差異 - 生成循環與字符串逗號分隔

例如,如果我使用字符串創建數組,如下例所示,一切正常。即:

$items = array(
    "Great Bittern" => "Botaurus stellaris", 
    "Little Grebe" => "Tachybaptus ruficollis") 

當我創建如下數組,似乎陣列無法識別,或者可能在陣列中的數據是不可搜索:

$items = array(); 
$query = mysql_query("MY QUERY"); 
while ($row = mysql_fetch_array($query)) 
{ 
array_push($data, $row['name']); 
} 

是因爲MySQL的呼叫在包含它的php文件之後創建的文件已被加載?我已經嘗試過在循環中創建數組的許多變體,但都沒有工作。

在此先感謝您的任何建議或提示。把我的頭髮拉出來!

+0

除此之外,第一個是關聯數組,第二個是數值型,在第二個示例中,不會追加到$ items。如果你做得對,那麼「正常」數組和循環中填充的數組之間沒有區別。 – 2011-06-16 14:07:04

回答

1

你的兩個例子做了根本不同的事情。

在第一個例子中,你有大多數語言稱爲「散列」或「地圖」的東西;一系列鍵/值對將一個字符串映射到另一個字符串。 「偉大的苦汁」將是關鍵,而「Botaurus stellaris」將是相當有價值的。

在第二個,你有一個更傳統的數字索引數組與索引鍵。沒有什麼能夠阻止您像第一個示例中那樣創建映射,您只需明確指定字符串鍵而不是使用array_push。如果您的查詢返回有兩個關聯的值,你會做這樣的事情

$data[$row['key']] = $row['value']; 

哪種方法您使用取決於你的jQuery插件,希望接收什麼樣的數據。它是否需要鍵/值映射或值數組?

+0

@dwarbi正如我在我的示例中所說的,只需使用$ data [$ new_key] = $ new_value'將新值賦給新密鑰即可。如果你沒有特定的鍵,那麼只需使用'array_push'。重要的問題是,你需要爲你的jQuery插件提供哪種形式的數組? – meagar 2011-06-16 14:35:28

+0

謝謝你 - 我意識到我的後續評論是一個愚蠢的評論。 – dwarbi 2011-06-16 14:38:27

+0

所以,我也試過這個:在我的循環中,我添加了: $ items [$ row ['cityId']] = $ row ['name']; 當我print_r數組時,數據格式與示例中給出的數組完全相同。這不應該是一個哈希/地圖數組嗎?這就是jQuery插件所期望的。這就是爲什麼我認爲它可能與頁面/包含加載的順序有關。 – dwarbi 2011-06-16 14:40:46