【问题标题】:How to store array with array_push() outside loop?如何在循环外使用 array_push() 存储数组?
【发布时间】:2018-12-09 10:54:08
【问题描述】:

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

【问题讨论】:

  • 您在 foreach 内使用 print_r,因此您可以按时间查看记录尝试在 foreach 外使用 print_r
  • 我在 foreach 中使用 print_r 只是因为我想打印数组中所有非空的用户 ID。

标签: php jquery sql arrays codeigniter


【解决方案1】:

正如@scaisEdge 所写的那样——它的发生是因为您在foreach 循环中使用了print_r

如果你想过滤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
                )
        )
)

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

【讨论】:

  • 我试图用你的建议替换我的foreach,但里面仍然有空值。
  • 数组 ( [0] => 数组 ( [user_id] => Erick ) ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( [0] => 数组 ( [ user_id] => Baldi ) [1] => Array ( [user_id] => Bintang ) ) Array ( [0] => Array ( [user_id] => Bagas ) [1] => Array ( [user_id] => Baim ) )
  • @aldi 很奇怪 - 在我的回答中,我还添加了空数组并且过滤器工作正常。我添加了另一种方式(通过使用额外的数组)希望会有所帮助
  • 我的不同之处在于我的 $query 数组有动态数组分支,它显示如下 $query = array(array("user_id" => "aaa"), null, array(), array("user_id" => null)), array(array("user_id" => "ccc"), null, array(),array("user_id" =>"ddd")),
  • 实际上我已经找到了适合我的情况的最佳解决方案,尽管我没有使用您的建议,但我仍然会评论您的最佳答案。感谢您的支持。
【解决方案2】:

@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) 时,结果在所有数组值中变成了重复数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多