PHP数组没有在foreach循环中设置自定义键

时间:2016-08-11 20:48:19

标签: php arrays codeigniter

我在CodeIgniter 2.x(PHP)中循环遍历MySQL返回的数据库对象。数组$gifts在开始之前已在循环外声明。

有一个内环和一个外环。外部循环生成下面的第二个数组示例。内部循环生成问题数组。

在第2行中,$i['gifts'][$row->id_gift]正确设置了所需ID $row->id_gift的密钥。在LINE 1中,它不是。数组键以0-n的顺序按数字顺序分配,就像使用$gifts[][$sd] = $row->$sd设置一样。

对于为什么有任何想法?

$query = $this->db->get();

if ($query->num_rows() > 0)
{
    foreach ($query->result() as $row)
    {
        foreach ($select_details as $sd)
        {
           $gifts[$row->id_gift][$sd] = $row->$sd; // LINE 1
           $i['gifts'][$row->id_gift] = array('merchant_rank'=>$i['merchant_rank'],'rank'=>$row->rank); // LINE 2
        }
    }                
}

$select_details = array('id_gift','id_group','rank');

数组(LINE 1)输出样本:

Array ( 
    [0] => 
    Array ( 
        [id_gift] => 392 
        [id_group] => 244 
        [rank] => 1 
    ) 
    [1] => Array ( 
        [id_gift] => 287 
        [id_group] => 239 
        [rank] => 1 
    ) 
    [2] => Array ( 
        [id_gift] => 264 
        [id_group] => 4 
        [rank] => 1)
)

数组(LINE 2)输出样本(注意gifts数组中的正确键):

Array (
    [0] => Array
    (
        [id] => 49
        [id_group] => 49
        [id_merchants] => 116
        [gifts] => Array
        (
            [392] => Array
            (
                [merchant_rank] => 1
                [rank] => 1
            )
            [287] => Array
            (
                [merchant_rank] => 1
                [rank] => 2
            )
            [264] => Array
            (
                [merchant_rank] => 1
                [rank] => 3
            )
        )
    )
)

已解决。如果您感到好奇,请参阅下面的回答。感谢您的帮助@Spartan和@DontPanic。

1 个答案:

答案 0 :(得分:1)

好的,我发现了问题。你们中间经验丰富的程序员可能并不会感到惊讶。

稍后在脚本中我正在使用多维数组排序来破坏密钥。我确信有一种方法可以防止这种情况,但这与此无关。

usort($gifts, function($a, $b) { return $a['rank'] - $b['rank']; });