我正在尝试制作一个适合Codeignitors input_batch活动记录的数组。我正在查询一个Link表,所以我只有两列——user_id和group_id,因为我只插入某个用户的信息,所以user_id每次都是相同的,我只需要更改group_id。
以下是我所做的:
$str = $dataGroups['groups'];
preg_match_all('/[0-9]/', $str, $matches);
在这一部分,我只获取组的信息,这些信息以显示为"1,2,3,4…"的数字的形式存在,并且只获取外键"group_id"的值
之后,我所做的就是创建一个数组,我将用于input_batch记录,这样做:
$count = count($matches[0]);
$datas = array();
for ($i = 0; $i < $count; ++$i)
{
$datas[] = array("user_id"=>$data['id'],"group_id" => $matches[0][$i]);
}
return $datas;
这里$data['id']是user_id,对于所有元素都应该相同。最后,我必须获得与CI教程中所示相同的结构(我想至少是这样),即:
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name' ,
'date' => 'Another date'
)
);
(我没有修改它,我只是在这里引用它),但当我var_dump($data)时,我会得到null。所以我的逻辑在某处泄漏。
谢谢你的帮助Leron
$str = $dataGropus['groups']; // comma separated list
$arr_groups = explode(',', $str); // split the string into an array based on the comma
$datas = array(); // initiate param, not really necessary in PHP, just for clarity's sake
$user_id = $data['id'];
foreach($arr_groups as $group_id)
{
$arr_temp = array("user_id" => $user_id, "group_id" => $group_id);
array_push($datas, $arr_temp); // you could use $datas[] = $arr_temp, but I like array_push
}
return $datas;
以下是我的做法。当你可以使用explode()
时,没有理由使用"复杂"的赛前技巧。
如果这仍然不起作用,请确保$str和$data['id']有效。