我想从mysql数据库创建一个数组。这是我的表data
:
+--------+-------+--------+--------+
| order | id | name | age |
+--------+-------+--------+--------+
| 12 | 121 | fred | 23 |
| 12 | 122 | sam | 24 |
| 12 | 123 | joe | 42 |
| 12 | 124 | alan | 33 |
+--------+-------+--------+--------+
数组最终应该像这样:
array(4) {
["121"]=>
array(2) {
["name"]=>
string(4) "fred"
["age"]=>
string(2) "23"
}
["122"]=>
array(2) {
["name"]=>
string(3) "sam"
["age"]=>
string(2) "24"
}
["123"]=>
array(2) {
["name"]=>
string(3) "joe"
["age"]=>
string(2) "42"
}
["124"]=>
array(2) {
["name"]=>
string(4) "alan"
["age"]=>
string(2) "33"
}
}
这就是我创建数组的方式:
$sql = "SELECT * FROM data WHERE order = '12'";
$q = $pdo->prepare($sql);
$q->execute();
$result = $sql->fetchAll();
var_dump($result);
但我的结果是:
array(4) {
[0]=>
array(20) {
["order"]=>
string(10) "12"
[0]=>
string(10) "12"
["id"]=>
string(32) "121"
[1]=>
string(32) "121"
["name"]=>
string(12) "fred"
[2]=>
string(12) "fred"
["age"]=>
string(32) "23"
[3]=>
string(32) "23"
}
[0]=>
array(20) {
["order"]=>
string(10) "12"
[0]=>
string(10) "12"
["id"]=>
string(32) "122"
[1]=>
string(32) "122"
["name"]=>
string(12) "sam"
[2]=>
string(12) "sam"
["age"]=>
string(32) "24"
[3]=>
string(32) "24"
}
and so on...
我不知道如何将阵列变为正确的形式
答案 0 :(得分:1)
首先,您要合并来自不同API的调用,这些调用不起作用,其次,您尝试从文本字符串中获取记录,而不是从结果集中获取记录。
注意:以下内容取代了之前未能提供所需结果的答案。
在更改了我的数据库不喜欢的一些列名后,我已经提出了以下内容:
<pre>
<?php
$some_value = 12;
$dbh = new PDO(/*Your connect string goes here*/);
$sql = "SELECT id, name, age FROM some_data WHERE order_id = :order_key";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':order_key'=>$some_value));
$my_output = array();
foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $rec)
{
$my_output[$rec['id']] = array('name' => $rec['name'], 'age' => $rec['age']);
}
var_dump($my_output);
?>
</pre>
更改变量$some_value
的值可让您针对order_id
的其他值运行查询。
产生的输出如下:
array(4) {
[121]=>
array(2) {
["name"]=>
string(4) "fred"
["age"]=>
int(23)
}
[122]=>
array(2) {
["name"]=>
string(3) "sam"
["age"]=>
int(24)
}
[123]=>
array(2) {
["name"]=>
string(3) "joe"
["age"]=>
int(42)
}
[124]=>
array(2) {
["name"]=>
string(4) "alan"
["age"]=>
int(33)
}
}
将我留下的类型作为读者的练习。
答案 1 :(得分:1)
如果您使用PDO,则有优雅的方法
$sql = "SELECT `id`, `name`, `age` FROM `data` WHERE `order` = '12'";
$q = $pdo->prepare($sql);
$q->execute();
$result = $q->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
var_dump($result);
此外,如果您需要id
作为键和$ result中的值,则在SQL查询中声明id
列两次:
SELECT `id`, `id`, `name`, `age` FROM `data` WHERE `order` = '12'
答案 2 :(得分:0)
我认为这样可行:
$ps = array();
while ($row = $result->fetch_assoc()) {
$p=array();
$p["name"]=$row["name"];
$p["age"]=$row["age"];
$ps[$row["id"]]=$p;
}