如何使用array_push()在循环外存储数组?

时间:2018-12-09 10:54:09

标签: php jquery sql arrays codeigniter

当我尝试print_r时,我有一个数组就是这样:

Array ( [user_id] => Erick ) Array ( [user_id] => Baldi) Array([user_id]=> Bintang ) Array ( [user_id] => Bagas ) Array ( [user_id] => Baim )

我的预期输出就像:

Array (
    Array ( 
        [user_id] => Erick 
    ) 
    Array ( 
        [user_id] => Baldi
    ) 
    Array ( 
        [user_id] => Bintang 
    ) 
    Array ( 
        [user_id] => Bagas 
    ) 
    Array ( 
        [user_id] => Baim 
    )
)

这里有人知道吗?我坚持这一点。 这是我的php代码:

public function get_userid() {
    // $action  = $this->input->post('action');
    $customerField  = $this->input->post('customer');
    $projectField   = $this->input->post('project');
    $user_roleField = $this->input->post('role');

    for ($i=0; $i<count($customerField); $i++) { 
        for ($j=0; $j<count($projectField); $j++) { 
            for ($k=0; $k<count($user_roleField); $k++) { 
                array_push($test, $this->get_array_push($customerField[$i], $projectField[$j], $user_roleField[$k]));
            }
        }
    }   
}

public function get_array_push($customer, $project, $user_role) {

    $query = $this->db->query("SELECT user_id
    FROM  `ixt_user_project_list` 
    LEFT JOIN ixt_user_type ON ixt_user_project_list.user_type = ixt_user_type.user_type
    WHERE ixt_user_project_list.user_cust_id ='".$customer."'
    AND ixt_user_project_list.user_project_id ='".$project."'
    AND ixt_user_type.user_owner ='".$user_role."'")->result_array();

    //Filter null array
    foreach ($query as $key => $value) {
        print_r($value);
    }
}

这是我的初始查询值:

Array ( [0] => Array ( [user_id] => Erick ) ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( [0] => Array ( [user_id] => Baldi ) [1] => Array ( [user_id] => Bintang ) ) Array ( [0] => Array ( [user_id] => Bagas ) [1] => Array ( [user_id] => Baim ) )

2 个答案:

答案 0 :(得分:0)

@scaisEdge写道-之所以发生这种情况,是因为您在print_r循环中使用了foreach

如果要过滤null结果,可以将array-filter用作:

$arr = array(array("user_id" => "aaa"), null, array(), array("user_id" => null), array("otherField" => "bbb"));
$filterdResult = array_filter($arr, function($elem) {
    return ($elem && array_key_exists("user_id", $elem) && !is_null($elem["user_id"]));
});

现在您可以做print_r($filterdResult );

这将输出:

Array
(
    [0] => Array
        (
            [user_id] => aaa
        )
)

已编辑:将新输入设置为:

$query = array(array(array("user_id" => "aaa"), null, array(), array("user_id" => null)), array(array("user_id" => "ccc"), null, array(),array("user_id" =>"ddd")));

您可以使用以下内容:

$res = array();
//Filter null array
foreach ($query as $key => $value) {
        array_push($res, array_filter($value, function($elem) {
                return ($elem && array_key_exists("user_id", $elem) && !is_null($elem["user_id"])); }));
}
print_r($res);

哪个输出:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [user_id] => aaa
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [user_id] => ccc
                )
            [3] => Array
                (
                    [user_id] => ddd
                )
        )
)

如果需要,从此处开始展平。

答案 1 :(得分:0)

@David Winder我尝试将您的建议与空数组过滤器结合在一起。

$res = array(); 
    //Filter null array
    foreach ($query as $key => $value) {
        if (!is_null($value)) {
            $res[] = $value;
            //print_r($res);
        }
    }

但是当我在foreach循环中使用print_r($ res)时,结果变成了所有数组值中的重复数组。