2011-10-13 49 views
3

關聯數組有一個奇怪的問題。此代碼:您可以強制PHP將數字鍵視爲關聯數組鍵嗎?

$sql = DB::select('id','process_id')->from('field')->order_by('process_id')->order_by('sort_order'); 
$query = $sql->execute(); 

foreach($query->as_array() as $row){ 
    $results[$row['id']] = $this->get_field($row['id']); 
}  

使用數字鍵創建數組。在我的開發環境中,該數組被視爲關聯數組,並按照查詢構建的順序排列。但是,在生產過程中,將鑰匙作爲數字對待,並根據ID進行分類。如果我強制PHP考慮關鍵關聯:

$results["a".$row['id']] = $this->get_field($row['id']); 

它使用MySQL排序。不幸的是,雖然有很多代碼取決於密鑰只是ID。

有沒有人有任何想法,爲什麼可能有服務器之間的區別?任何解決方法的想法?

+0

嘗試$結果[ 「」 $行[ '身份證'。]。我不確定PHP如何處理這個價值,這取決於解釋發生的地方。 –

+5

這很奇怪...... PHP不會自動對鍵進行排序,它會按照插入順序進行存儲。你確定查詢結果是兩次相同嗎? PHP中的數值和關聯數組實際上沒有區別。這是相同的數據結構。 –

+1

問題是其他地方...不是在發佈的代碼。 –

回答

2

也許嘗試將其轉換爲字符串?

$results[(string)$row['id']] = $this->get_field($row['id']); 

或者,如果你關心的是秩序,只是把它們作爲一個正常的列表:

$results[] = $this->get_field($row['id']); 
+1

,不應該改變順序 –

+0

我會試一試,併發回我的發現... – minimal

+1

我試着鑄造,它仍然解釋爲數字... – minimal

相關問題