如何使用PDO以[col1=>[col2=>col3,col2=>col3]]格式从MySQL表取数?
使用PDO将MySQL表数据转换为指定嵌套数组格式
没问题,这需求很清晰,我们可以通过PDO查询后遍历结果,轻松构建你想要的[bid_type => [lvl => desc, ...], ...]格式数组。下面是具体实现步骤和代码:
步骤1:建立PDO数据库连接
先配置好你的数据库参数,完成基础连接(记得替换成你的实际数据库信息):
// 数据库配置信息 $host = 'localhost'; $dbname = 'your_database_name'; $username = 'your_db_username'; $password = 'your_db_password'; try { // 初始化PDO连接,设置异常错误模式方便调试 $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("数据库连接失败: " . $e->getMessage()); }
步骤2:查询数据并构建目标数组
因为bid_type和lvl的组合是唯一的,我们可以直接查询全表数据,然后循环遍历把数据塞进目标结构:
// 初始化空数组用于存储结果 $resultArray = []; // 执行查询(注意`desc`是MySQL关键字,要用反引号包裹) $stmt = $pdo->query("SELECT bid_type, lvl, `desc` FROM bid_lvl_descs"); // 逐行读取结果并组装数组 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // 外层键为bid_type,内层键为lvl,对应值为desc $resultArray[$row['bid_type']][$row['lvl']] = $row['desc']; } // 可选:打印结果验证结构是否正确 echo '<pre>'; print_r($resultArray); echo '</pre>';
关键细节说明
- 为什么要给
desc加反引号?因为desc是MySQL的内置关键字,直接写会触发语法错误,用反引号包裹可以明确它是列名。 - 由于
bid_type+lvl的组合唯一,完全不用担心循环时出现键被覆盖的情况,每个lvl都会对应唯一的desc值。 - 如果数据量很大,这种逐行处理的方式比一次性用
fetchAll加载所有数据更节省内存。
运行后你会得到完全符合要求的数组结构,示例输出大概是这样:
Array ( [9] => Array ( [1] => Blabla [2] => bla ba bla [3] => bla bla bla bla [4] => Bllsllsabablalllll ) [7] => Array ( [1] => bla [2] => blabla [3] => blablabla [4] => Bbllaallssl ) )
内容的提问来源于stack exchange,提问作者Moe Epo
相关产品推荐
相关产品推荐

