首页 > 解决方案 > 如何在循环外使用 array_push() 存储数组?

问题描述

我有一个数组,当我尝试 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 ) )

标签: phpjquerysqlarrayscodeigniter

解决方案


正如@scaisEdge 所写 - 它的发生是因为您使用了循环print_r内部。foreach

如果要过滤null结果,可以将数组过滤器 用作:

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

如果需要,可以从这里进行展平。


推荐阅读