PHP按行获取MySQL数据库作为关联数组

PHP按行获取MySQL数据库作为关联数组,php,mysql,arrays,Php,Mysql,Arrays,我有一个简单的mySQL数据库表,正在加载到PHP数组中。我希望mySQL表的id列(它是自动递增的,但我认为这不相关)成为PHP数组中每个元素的数组键,而不是数组是数字 与此相反: Array( Array(id=>'1', field1=>someval, field2=>val), Array(id=>'2', field1=>val, field2=>otherval), Array(id=>'4', field1=>val,

我有一个简单的mySQL数据库表,正在加载到PHP数组中。我希望mySQL表的
id
列(它是自动递增的,但我认为这不相关)成为PHP数组中每个元素的数组键,而不是数组是数字

与此相反:

Array(
  Array(id=>'1', field1=>someval, field2=>val),
  Array(id=>'2', field1=>val, field2=>otherval),
  Array(id=>'4', field1=>val, field2=>otherval)
)
我想要这个:

Array(
  1=>Array(field1=>someval, field2=>val),
  2=>Array(field1=>val, field2=>otherval),
  4=>Array(field1=>val, field2=>otherval)
)
我不在乎每行的关联数组中是否保留了
id


有没有一种方法可以在不循环原始mySQL阵列并占用大量处理时间的情况下执行此操作?

“有没有一种方法可以在不循环原始mySQL阵列并占用大量处理时间的情况下执行此操作?”

我相信答案是否定的。您所能做的最好的事情就是在数组中循环时尽可能地提高效率。

“有没有一种方法可以做到这一点,而不必循环原始mySQL数组并占用大量的处理时间?”


我相信答案是否定的。您所能做的最好的事情就是在数组中循环时尽可能地提高效率。

您可以在获取时这样做:

$query_ret = mysql_query(...);
$result = array();
while ($row = mysql_fetch_assoc($query_ret)) {
    $result[array_shift($row)] = $row;
}

您可以在提取时这样做:

$query_ret = mysql_query(...);
$result = array();
while ($row = mysql_fetch_assoc($query_ret)) {
    $result[array_shift($row)] = $row;
}

如果您有PDO,您肯定会看到fetchall PDO文档中的示例#3:


这样不仅可以更有效地使用服务器的内存和处理能力。。。它还将使您能够利用PDO的其他几个强大API。

如果您有PDO,您肯定会看到关于fetchall的PDO文档中的示例#3:


这样不仅可以更有效地使用服务器的内存和处理能力。。。它还可以让您利用PDO的其他几个强大API。

@Hammerite没有读过这个问题吗?我认为OP所指的原始mySQL数组是fetch循环后的$result数组,您可以在fetch循环时创建它,而不是在fetch循环后进行另一个循环来更改它,fetch循环是必须的,不是吗?OP所说的“原始mySQL数组”是指
$result
中包含的mySQL结果对象。他询问了一种实现代码最终结果的方法,但没有在代码中使用
while
循环。但是,由于你的解释是(我认为是)误解的结果,而不是没有阅读问题,我删除了我的反对票。结果我无法删除我的反对票,因为我放置它的时间太长了。@Hammerite没有阅读问题?我认为OP所指的原始mySQL数组是fetch循环后的$result数组,您可以在fetch循环时创建它,而不是在fetch循环后进行另一个循环来更改它,fetch循环是必须的,不是吗?OP所说的“原始mySQL数组”是指
$result
中包含的mySQL结果对象。他询问了一种实现代码最终结果的方法,但没有在代码中使用
while
循环。但是,由于你的解释是(我认为是)误解的结果,而不是没有阅读问题,我删除了我的反对票。结果我无法删除我的反对票,因为我放置它的时间太久了。