如何 select 对行使用 SQL 是数组

How to select use SQL with a row is Array

我有这样的变量数组($avail):

$avail = 
Array (
[0] => Array
    (
        [item_id] => 1
        [qty_avail] => 44
    )

[1] => Array
    (
        [item_id] => 4
        [qty_avail] => 33
    )

[2] => Array
    (
        [item_id] => 6
        [qty_avail] => 50
    ) .....
);

我想要 select 和 codeigniter :

    $this->db->select(
        'item_id,'
        .$avail[0]['qty_avail'].' as "qty_avail", 
        qty_tocome, qty_togo'
    );
    $this->db->order_by('item_id', 'asc');
    $this->db->where('item_category_id = ', $category_id);
    $query = $this->db->get('t_inventory i',$limit,$offset)->result_array();
    print_r($query);

结果都是 [qty_avail] 总是 $avail[0] :

Array (
[0] => Array
    (
        [item_id] => 1
        [qty_avail] => 44
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )

[1] => Array
    (
        [item_id] => 4
        [qty_avail] => 44
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )

[2] => Array
    (
        [item_id] => 6
        [qty_avail] => 44
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )
);

那么,如何 select 循环 $avail[0] = 成为 sql 中的 $avail[$i++]? 我可以得到这样的结果:

Array (
[0] => Array
    (
        [item_id] => 1
        [qty_avail] => 44
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )

[1] => Array
    (
        [item_id] => 4
        [qty_avail] => 33
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )

[2] => Array
    (
        [item_id] => 6
        [qty_avail] => 50
        [qty_tocome] => 0.00
        [qty_togo] => 0.00
    )
);

谢谢..

您可以这样使用 array_replace_recursive

<?php
$arr = [
    ["item_id" => 1,
    "qty_tocome" => 0.00,
    "qty_togo" => 0.00],
    ["item_id" => 4,
    "qty_tocome" => 0.00,
    "qty_togo" => 0.00],
    ["item_id" => 6,
    "qty_tocome" => 0.00,
    "qty_togo" => 0.00]
];

$avail = [
["qty_avail" => 44],
["qty_avail" => 33],
["qty_avail" => 50]
];

$finalArr = array_replace_recursive($arr,$avail);
print_r($finalArr);

所以你的输出将是:

Array
(
    [0] => Array
        (
            [item_id] => 1
            [qty_tocome] => 0
            [qty_togo] => 0
            [qty_avail] => 44
        )

    [1] => Array
        (
            [item_id] => 4
            [qty_tocome] => 0
            [qty_togo] => 0
            [qty_avail] => 33
        )

    [2] => Array
        (
            [item_id] => 6
            [qty_tocome] => 0
            [qty_togo] => 0
            [qty_avail] => 50
        )

)

但请确保数量以正确的顺序分配,因为您使用的是 $this->db->order_by('item_id', 'asc');

try this

$query=$this->db->select('item_id,qty_avail as qty_avail, qty_tocome,qty_togo');
                    ->order_by('item_id', 'asc')
                    ->where('item_category_id ',$category_id)
                    ->limit($limit,$offset);
                    ->get('t_inventory i');
    $data = $query->result_array();
    foreach($data as $a){
    $a['qty_avail'] = $data[0]['qty_avail'];
    }
    print_r($a);