如何将整数指定为关联数组中的键?

时间:2011-07-19 16:34:57

标签: php arrays

我有一些代码可以从表中获取一些行,我想在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然后修剪它,但这不起作用,而且这只是一个奇怪的hacky尝试。

希望这是有道理的。我的问题:如何简单地告诉密钥是一个特定的数字?

3 个答案:

答案 0 :(得分:1)

你可以在foreach语句之前使用var_dump $ course,在返回之前使用$ out吗?

答案 1 :(得分:1)

如果它覆盖它,我不明白为什么。试试这个......

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

答案 2 :(得分:0)

第一个片段看起来应该按照您想要的方式工作。假设$ c-> id不生成有序的整数列表,你是否在从select_array()中检索后对数组进行排序?您是否在foreach之后和return语句之前尝试了var_dump()'ng $ out?

如果转换为字符串可以解决问题,请尝试类似

的内容
$out[(string)$c->id] = $c->title;