2011-07-19 71 views
0

我有一些代碼從表中獲取一些行,我想在PHP中創建一個像[row_id] => row_title的關聯數組。這將被用來填充選擇列表。問題是,除非我在其中包含一個字符串,否則密鑰總是回到從0開始的有序數字。如果我用該密鑰添加一個字符串,那麼該密鑰保留我想要的ID。但顯然我不想在密鑰中輸入字符串。如何將整數指定爲關聯數組中的鍵?

這裏是我的代碼:

public static function select_array(){ 
    $courses = ORM::factory('course')->order_by('title')->find_all(); 
    $out = array(); 
    foreach($courses as $c){ 
     $out[$c->id] = $c->title; 
    } 
    return $out; 
} 

的$ C-> ID應該是從數據庫中的ID,但PHP與計數重寫此。如果我這樣做:

public static function select_array(){ 
    $courses = ORM::factory('course')->order_by('title')->find_all(); 
    $out = array(); 
    foreach($courses as $c){ 
     $test = "." . $c->id; 
     $out[$test] = $c->title; 
    } 
    return $out; 
} 

然後鍵將包括正確的ID,但與「。」在前面...我試過使用(字符串)$ c-> id但沒有運氣。我也嘗試將$ test設置爲「」。 $ c-> id然後修剪它,但那不起作用,無論如何這只是一個奇怪的冒險嘗試。

希望是有道理的。我的問題:如何簡單地將密鑰告訴特定號碼?

回答

1

你能foreach語句之前的var_dump $課程和$走出返回之前?

+0

經過一些應用var_dumpage我找到了搞亂數組的罪魁禍首。 事實上,上述功能的工作原理應該如此;這些密鑰仍然來自數據庫的正常ID。但是在這個函數之後,我添加了這個: 'array_unshift($ courses,「Select course to add」);' 那時,所有的鍵都被重置爲一個有序的計數,從0開始爲未移位的元素。我猜想是有道理的,但相當有趣的是,只有當所有進入array_unshift的鍵都是整數時纔會發生! 感謝所有的快速反應,它幫助我繼續尋找答案! – Tapefreak

+0

var_dump很棒! :) – zajd

0

第一個代碼段看起來應該按照您想要的方式工作。假設$ c-> id不會生成一個有序的整數列表,您是從select_array()中檢索後對數組進行排序?你是否在foreach之後和return語句之前嘗試了var_dump()'ng $ out?

如果轉換爲字符串解決了這個問題,你可以試試

$out[(string)$c->id] = $c->title; 
1

那麼,如果它覆蓋它,我不明白爲什麼。試試這個...

foreach($courses as $c){ 
    $test = "" . $c->id; 
    $out[(int)$test] = $c->title; 
} 
相關問題