我有一个数组本身包含两个数组 - 一个包含item ids
,另一个包含order of the item
它们看起来像这样:
Array
(
[item_order] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
[item_id] => Array
(
[0] => 20
[1] => 34
[2] => 24
)
)
我现在需要做的是根据其ID
更新每个项目的行顺序不知道从哪一个开始。
最终结果应该类似于
item_id item_name item_order
------------------------------------
20 xxxxx 0
34 yyyyy 1
24 zzzzz 2
答案 0 :(得分:1)
您可以将数据转换为array
arrays
,其中包含key
=> value
对(其中键是字段名称)并使用update_batch codeigniters active_record类的方法:
list($item_id, $item_order) = $array_with_data; // or extract($array_with_data);
$data = [];
foreach($item_id as $i => $id) {
$data[] = [ 'item_id' => $id, 'item_order' => $item_order[$i], ];
}
$this->db->update_batch('yourtable', $data, 'item_id');
foreach
循环
这:
Array
(
[item_order] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
[item_id] => Array
(
[0] => 20
[1] => 34
[2] => 24
)
)
变成了这个
Array
(
[0] => Array
(
'item_order' => 0
'item_id' => 20
)
[1] => Array
(
'item_order' => 1
'item_id' => 34
)
[2] => Array
(
'item_order' => 2
'item_id' => 24
)
)
这是update_batch
格式的理解。第三个参数指定函数用于知道要更新哪一行的字段。
更新批处理将数据分隔100行,然后创建基于案例的查询,从而避免大量查询。
答案 1 :(得分:0)
通过制作函数
在模型中尝试这个$item_ids = $item['item_id'];
$orders = $item['item_order'];
if (!empty($item_ids) && !empty($orders)) {
for ($i = 0; $i < count($item_ids); $i++) {
$data = array('item_order' => $orders[$i]);
$this->db->where('item_id', $item_ids[$i]);
$this->db->update('yourtablename', $data);
}
}