PHP PDO查询结果整理为指定数组格式求助
问题描述
我一直尝试将数据库查询结果格式化为特定数组结构,但操作有误,希望得到帮助。
现有查询语句
$sql = "SELECT tbl1.spec_num As spec_num, IF(tbl1.spec_fld, 'TRUE', 'FALSE') As spec_fld, tbl2.auth_id As auth_id FROM spec_table tbl1 JOIN spec_auth tbl2 ON tbl1.id=tbl2.spec_table_id WHERE tbl1.spec_fld=1 AND tbl2.enb=1;";
MySQL执行后的查询结果
spec_num spec_fld auth_id 123413253242135234213432112345DDDDDDDG TRUE 1234567 123413253242135234213432112345DDDDDDDG TRUE 3423435 123413253242135234213432112345DDDDDDDG TRUE 9234245
当前PHP PDO代码
$stmt = $connection->prepare($sql); $stmt->execute(); while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $result_json = json_encode($result); echo $result_json; }
预期生成的数组结构
需要创建变量$dtp,结构如下:
$dtp = [ 'spec_num' => '123413253242135234213432112345DDDDDDDG', 'spec_fld' => TRUE, 'auth_ids' => [ '1234567', '3423435', '9234245', ], ];
最佳实现方式
直接通过循环遍历查询结果,构建目标数组即可,具体代码如下:
// 初始化目标数组结构 $dtp = [ 'spec_num' => '', 'spec_fld' => false, 'auth_ids' => [] ]; $stmt = $connection->prepare($sql); $stmt->execute(); while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { // 仅第一次循环时设置spec_num和spec_fld(所有结果行这两个值一致) if (empty($dtp['spec_num'])) { $dtp['spec_num'] = $result['spec_num']; // 将字符串'TRUE'转换为布尔值TRUE $dtp['spec_fld'] = $result['spec_fld'] === 'TRUE'; } // 收集所有auth_id到数组中 $dtp['auth_ids'][] = $result['auth_id']; } // 可通过print_r($dtp)查看最终结构
关键说明
- 由于查询结果中
spec_num和spec_fld的值所有行完全一致,因此仅在第一次循环时赋值,避免重复操作 - 通过严格相等判断将数据库返回的字符串'TRUE'转换为布尔值,匹配预期结构要求
- 循环中直接将每个
auth_id追加到auth_ids数组,无需额外处理
内容的提问来源于stack exchange,提问作者carol1287
相关产品推荐
相关产品推荐

