Php Codeigniter活动记录-使用阵列中的数据更新查询

Php Codeigniter活动记录-使用阵列中的数据更新查询,php,mysql,arrays,codeigniter,activerecord,Php,Mysql,Arrays,Codeigniter,Activerecord,我有一个数组,它本身包含两个数组-一个保存项目ID,另一个保存项目的顺序 它们看起来像这样: Array ( [item_order] => Array ( [0] => 0 [1] => 1 [2] => 2 ) [item_id] => Array ( [0] => 20

我有一个数组,它本身包含两个数组-一个保存
项目ID
,另一个保存项目的
顺序

它们看起来像这样:

    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

在您的模型中通过创建函数来尝试此选项

$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);
    }
}
$item_id=$item['item_id'];
$orders=$item['item_order'];
如果(!empty($item_id)&&!empty($orders)){
对于($i=0;$i$orders[$i]);
$this->db->where('item_id',$item_id[$i]);
$this->db->update('yourtablename',$data);
}
}

您可以将数据转换为
数组的
数组,其中包含
=>
对(其中键是字段名),并使用codeigniters活动记录类的方法:

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\u batch
了解的格式。第三个参数指定一个字段,函数使用该字段来知道要更新的行


“更新批处理”将数据按100行分隔,然后创建基于实例的查询,从而避免大量查询。

有没有一种方法可以做到这一点,而不必循环并为每行执行新的更新查询?我想没有,您必须循环数组,因为您无法将ID按顺序排列到它们的位置order@Tom看我的回答,,它不在循环中使用更新。我稍微更改了数组。这会改变你的答案吗?你所做的和我想做的一样。。。