如何用PHP从SQL数据库生成可便捷调用的多维数组?
问题:PHP连接SQL生成多维数组失败,当前仅生成一维数组
想要通过PHP连接SQL数据库生成多维数组,以便在HTML中用echo 'Contact : '.$contact[1][1].'<br>';这类写法调用指定行/位置的单元格数据,但当前代码生成的是一维数组,所有字段数据都作为单独元素存在,无法按「行+列」的方式访问。
原代码
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM `admin` ORDER BY id"; $result = $conn->query($sql); $contact = array(); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { array_push($contact, $row["id"], $row["name"], $row["details"], $row["active"]); } }else{ echo "error"; } $conn->close(); echo 'test 1'.$contact[3][3].'<br>'; echo 'test 2'.$contact[0][1].'<br>'; ?>
解决方法
问题核心是array_push的用法错误:你现在每次循环把id、name等单个字段值依次推入数组,导致所有数据都在一维结构里。要生成二维数组,必须把整行数据包装成一个子数组再推入$contact。
方法1:手动构造子数组
把循环内的array_push代码替换为:
array_push($contact, array($row["id"], $row["name"], $row["details"], $row["active"]));
每次循环会将当前行的4个字段打包成子数组,再添加到$contact中,最终得到二维数组。
方法2:用array_values简化代码
fetch_assoc()返回的是关联数组,array_values()可以将其转为数字索引数组,直接赋值给$contact的新元素即可:
$contact[] = array_values($row);
这个写法比array_push更简洁,效果和方法1完全一致。
访问示例
修改后数组索引从0开始:
- 第1行(数据库第一条数据)的第2个字段(name):
$contact[0][1] - 第2行的第1个字段(id):
$contact[1][0]
如果需要让行索引从1开始(匹配你示例中的$contact[1][1]),可以在赋值时调整:
// 方式1:用数据库id作为行索引(假设id是自增主键) $contact[$row["id"]] = array_values($row); // 方式2:强制生成从1开始的连续索引 $contact[] = array_values($row); array_unshift($contact, null); // 在数组开头插入空元素,让有效数据从索引1开始
内容的提问来源于stack exchange,提问作者user1296114
相关产品推荐
相关产品推荐

