发布一个数组并在PHP codeigniter中迭代它

时间:2014-10-16 08:03:24

标签: php arrays codeigniter

这是我第一次创建自己的网络服务(有人总是先为我做过),所以请耐心等待。

我发布了这个数组:

    $data = array(
        'user_id' => $this->post('user_id'),
        'group_id' => $this->post('group_id'),
        'child_id' => $this->post('child_id'), //will be nested array
        'custom' =>  $this->post('custom'),
        'time' => $this->post('time'),
        'date' => $this->post('date')
    );

我尝试使用以下内容创建一个嵌套数组:$this->post('child_id'),因为用户可以一次发布多个child_id

然后我试图遍历child_id,因为我需要将它们插入到mysql中:

for($i = 0; $i < sizeof($data['child_id']); $i++)
            {
                $result2 = $this->schedule_m->add_trans('transaction_schedule', $data, $result_id[0]['id']);
            }

我应该怎么做,所以我的child_id数组中可以有一个$data数组? (嵌套数组)

如何迭代它?

更新: 我已经更新了上面的代码。

我使用advanced rest client进行测试,我尝试在form内容类型中发布类似内容:

child_id=1&user_id=1&group_id=1&custom=&time=17%3A17%3A00&date=&child_id=2

请注意,插入了两个child_id(最左侧和最右侧),但只插入了最后一个(最右侧)。

这是模型中的add_trans

function add_trans($table, $data, $schedule_id) {
    $query = $this->db->insert($table, array('child_id' => $data['child_id'], 'schedule_id' => $schedule_id));
    return $query;
}

非常感谢你的时间。

3 个答案:

答案 0 :(得分:1)

甚至认为您在标记上将名称属性设置为child[]

您仍然需要将其称为:

'child_id' => $this->post('child_id')

它仍然会返回一个数组。

for($i = 0; $i < sizeof($data['child_id']); $i++) {
    $result2 = $this->schedule_m->add_trans('transaction_schedule', $data, $result_id[0]['id']);
}

编辑:

看着你查询字符串,这似乎是罪魁祸首:

child_id=1&user_id=1&group_id=1&custom=&time=17%3A17%3A00&date=&child_id=2
 ^ same index , same index, same index, it will overwrite and you will get only `2`

如果你想将它们全部变成数组格式,你需要像这样设置它们

child_id[]=1&user_id=1&group_id=1&custom=&time=17%3A17%3A00&date=&child_id[]=2
        ^ it needs to be set like this   

更新:

在你的模型中,如果你想要每行的每个id,那么你也可以在这种情况下循环:

function add_trans($table, $data, $schedule_id) {
    foreach($data['child_id'] as $child_id) {
        $query = $this->db->insert($table, array('child_id' => $child_id, 'schedule_id' => $schedule_id));  
    }

    // return $this->db->insert_id();
    return $query;
}

答案 1 :(得分:1)

当然不会起作用,它必须是

for($i = 0; $i < sizeof($data['child_id']); $i++)
{
      $result2 = $this->schedule_m->add_trans('transaction_schedule', $data['child_id'][$i], $result_id[0]['id']);
}

因为你没有设置$ data ['child_id []']所以它不存在,键只是一个字符串或数字,它不验证或解析任何东西

答案 2 :(得分:1)

您不需要在帖子方法中提供child[]。只给孩子,它将获得完整的数组你从视图发送什么

替换

 'child_id' => $this->post('child_id[]')

'child_id' => $this->post('child_id')