php - 如何在循环外使用 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 ) )
解决方案
正如@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
)
)
)
如果需要,可以从这里进行展平。
推荐阅读
- pytorch - & 运算符在 PyTorch 中做了什么,为什么它会改变形状?
- vuex - Vuex 动作中的多个参数不起作用
- c# - C#从对象列表中的字段中获取最大数字
- apache-kafka - Kafka - 是否可以更改主题的分区数,同时保持更改对生产者和消费者透明?
- javascript - 如何禁用 apexcharts 上的下载选项?
- c# - 在编译时已知属性时快速检索属性信息
- json - D3 图表不显示来自变量的 JSON 信息
- java - java中从camel导入的“from”在哪里?
- php - Laravel 在验证中带有 (And) 运算符
- javascript - 我想将项目附加到数组中的列表