Php 将3列的数据库结果转换为关联数组
我有一个MySQL查询,返回以下结果:Php 将3列的数据库结果转换为关联数组,php,arrays,Php,Arrays,我有一个MySQL查询,返回以下结果: +----------+----------+-------+ | ApptTime | ApptType | Count | +----------+----------+-------+ | 16:00 | pickup | 1 | +----------+----------+-------+ | 16:30 | dropoff | 1 | +----------+----------+-------+ | 16:3
+----------+----------+-------+
| ApptTime | ApptType | Count |
+----------+----------+-------+
| 16:00 | pickup | 1 |
+----------+----------+-------+
| 16:30 | dropoff | 1 |
+----------+----------+-------+
| 16:30 | pickup | 6 |
+----------+----------+-------+
| 16:45 | pickup | 2 |
+----------+----------+-------+
| 16:45 | dropoff | 1 |
+----------+----------+-------+
我需要循环遍历结果并创建一个新的关联数组,其中键是ApptTime
,值是ApptType
和Count
的组合,如下所示:
"16:00" => "1 pickup"
"16:30" => "1 dropoff, 6 pickup" //the order in which appointments are listed is irrelevant.
"16:45" => "1 dropoff, 2 pickup"
我尝试过以各种方式循环使用mysqli_fetch_assoc结果,并在循环中创建一个新数组,但我根本不了解如何进行,因此它不起作用。
非常感谢您的帮助。使用以下逻辑:
假设您在MySql resultset中得到相同的结果,我已经获取了示例数组
输出:
array(3) {
["16:00"]=>
array(1) {
[0]=>
string(8) "1 pickup"
}
["16:30"]=>
array(2) {
[0]=>
string(10) "1 Drop of "
[1]=>
string(8) "6 pickup"
}
["16:45"]=>
array(2) {
[0]=>
string(8) "2 pickup"
[1]=>
string(10) "1 Drop of "
}
}
您可以通过使用两个循环来实现这一点。一个用于准备所需格式的值,另一个用于实际将值放入该格式 首先,准备数据
$array = array(
array('ApptTime' => "16:00", 'ApptType' => "pickup", 'Count' => 1),
array('ApptTime' => "16:30", 'ApptType' => "dropoff", 'Count' => 1),
array('ApptTime' => "16:30", 'ApptType' => "pickup", 'Count' => 6),
array('ApptTime' => "16:45", 'ApptType' => "pickup", 'Count' => 2),
array('ApptTime' => "16:45", 'ApptType' => "dropoff", 'Count' => 1)
);
$new_array = [];
foreach($array as $arr) {
$time = $arr['ApptTime'];
$type = $arr['ApptType'];
$count = $arr['Count'];
//check if `$time` exists as key of `$new_array`, if not, create it with an empty array value
if(!array_key_exists($time, $new_array)) {
$new_array[$time] = [];
}
//add string e.g "1 pickup" as array value to array `$new_array` with key `$time`
$new_array[$time][] = "{$count} {$type}";
}
第一回路返回
Array
(
[16:00] => Array
(
[0] => 1 pickup
)
[16:30] => Array
(
[0] => 1 dropoff
[1] => 6 pickup
)
[16:45] => Array
(
[0] => 2 pickup
[1] => 1 dropoff
)
)
Array
(
[16:00] => 1 pickup
[16:30] => 1 dropoff, 6 pickup
[16:45] => 2 pickup, 1 dropoff
)
这就是我个人停下来的地方,在实际需要显示的时候格式化这些值。但是,以下循环可用于将$new\u数组
修改为所需的格式
foreach($new_array as &$n_arr) {
$n_arr = implode(', ', $n_arr);
}
二回路回路
Array
(
[16:00] => Array
(
[0] => 1 pickup
)
[16:30] => Array
(
[0] => 1 dropoff
[1] => 6 pickup
)
[16:45] => Array
(
[0] => 2 pickup
[1] => 1 dropoff
)
)
Array
(
[16:00] => 1 pickup
[16:30] => 1 dropoff, 6 pickup
[16:45] => 2 pickup, 1 dropoff
)
您不会“循环通过”获取关联。fnc会将每一行作为关联数组返回。发布你的php,你会得到一个更好的答案。我不知道这和mysqli有什么关系。如果您可以使用
var\u export()
发布生成,这将非常好。这与OPs输出不匹配。添加了预期的输出。逻辑只需要在字符串中合并即可使用。为什么要进行向下投票?因为您的解决方案与OPs预期输出不匹配。请参阅更新根据预期输出回答其匹配关联数组。我所做的相同操作只是缺少第二个循环。谢谢你的回答。我不知道array\u key\u存在
和内爆
。顺便说一下,在您的答案中,$new_array[$time]][]处有一个额外的右括号。@equinoxe5谢谢,修正了错误。