You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:15:37