如何选择使用带有行的SQL是Array

时间:2016-09-14 04:58:54

标签: php sql codeigniter-3

我有这样的变量数组($ 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
    ) .....
);

我想选择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
    )
);

那么,如何选择循环$ 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
    )
);

谢谢..

2 个答案:

答案 0 :(得分:1)

您可以像这样使用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');

答案 1 :(得分:0)

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);