Php 将3列的数据库结果转换为关联数组

Php 将3列的数据库结果转换为关联数组,php,arrays,Php,Arrays,我有一个MySQL查询,返回以下结果: +----------+----------+-------+ | ApptTime | ApptType | Count | +----------+----------+-------+ | 16:00 | pickup | 1 | +----------+----------+-------+ | 16:30 | dropoff | 1 | +----------+----------+-------+ | 16:3

我有一个MySQL查询,返回以下结果:

+----------+----------+-------+
| 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谢谢,修正了错误。