从MySQL生成PHP数组,键值来自;id";柱
我有一个MySQL数据库,如下所示:从MySQL生成PHP数组,键值来自;id";柱,php,mysql,arrays,Php,Mysql,Arrays,我有一个MySQL数据库,如下所示: ID TEXT PARENTID 20 Item1 null 23 Item2 20 27 Item3 20 80 Item4 27 Array ( [20] => Array ( [text] => Item1 [parentID] => ) [23] => Array ( [text]
ID TEXT PARENTID
20 Item1 null
23 Item2 20
27 Item3 20
80 Item4 27
Array (
[20] => Array ( [text] => Item1 [parentID] => )
[23] => Array ( [text] => Item2 [parentID] => 20 )
[27] => Array ( [text] => Item3 [parentID] => 20 )
[80] => Array ( [text] => Item4 [parentID] => 27 )
);
我想要的是在如下数组中检索此数据:
ID TEXT PARENTID
20 Item1 null
23 Item2 20
27 Item3 20
80 Item4 27
Array (
[20] => Array ( [text] => Item1 [parentID] => )
[23] => Array ( [text] => Item2 [parentID] => 20 )
[27] => Array ( [text] => Item3 [parentID] => 20 )
[80] => Array ( [text] => Item4 [parentID] => 27 )
);
请注意,键值表示表中id列的值
我已经尝试在mysql循环中创建一个数组(我仍在学习MySQLi,希望它很快会保持不变,但这个例子是在旧的mysql中):
这里的结果当然会生成“自动”键值,而不是所需的ID列中的值,再加上它将ID列作为内部数组的一部分
这里有没有成功的方法或解决办法
我希望有人能把我引向正确的方向
-----编辑------
我换了
$array[] = $row;
与
但是它仍然没有返回上面想要的结果。它返回以下内容:
Array (
[0] => Array ( [id] => 20 [text] => Item1 [parentID] => )
[1] => Array ( [id] => 23 [text] => Item2 [parentID] => 20 )
[2] => Array ( [id] => 27 [text] => Item4 [parentID] => 20 )
[3] => Array ( [id] => 80 [text] => Item4 [parentID] => 27 )
);
作为关联数组,这是可行的 你所要做的就是改变
$array[]=$row
到
$array[$row['ID']]=$row
您需要确保数据库中的ID
列是唯一的,这样关联数组就不会覆盖键(在这种情况下,只会保留最后一条具有重复ID的记录)
编辑(19-11-2015)
关于“mysql循环”-它只是一个普通的PHPwhile
循环,循环通过mysql\u*
或mysqli\u*
函数给出的记录。在数据库上执行sql语句返回的结果中循环,sql语句只是以某种方式为您获取和格式化行
MySQL和MySQLi是两种不同的东西,但是它们使用的SQL没有什么不同(除了可能准备好的语句?)。
学习SQL是您要做的事情,要执行SQL,您将从现在开始使用mysqli.*
,因为mysql.*
函数是
我只是想指出这些事情,以消除您可能已经或将来会遇到的一些困惑。:)
更多关于mysqli的阅读,如果你刚刚开始,一切都有点复杂,但这很好——理解你能做什么,努力理解你不能做什么
编辑2(19-11-2015)
$row
数组中的索引与ID
和ID
完全不同。一个将导致未定义索引
错误
我注意到在您的输出中,id
键实际上是小写的,所以我会尝试更改为小写
祝你好运 这作为关联数组是可行的
// Multidimensional array.
// main array by id with text and parent in secondary array
// tryed going by the second diagram
$arr = array();
$hent_folder = mysql_query("SELECT id, text, parentID FROM folders");
while($row = mysql_fetch_array($hent_folder))
{
$arr[$row['id']]['text'] = $row['text'];
$arr[$row['id']]['parentID'] = $row['parentID'];
}
你所要做的就是改变
$array[]=$row
到
$array[$row['ID']]=$row
您需要确保数据库中的ID
列是唯一的,这样关联数组就不会覆盖键(在这种情况下,只会保留最后一条具有重复ID的记录)
编辑(19-11-2015)
关于“mysql循环”-它只是一个普通的PHPwhile
循环,循环通过mysql\u*
或mysqli\u*
函数给出的记录。在数据库上执行sql语句返回的结果中循环,sql语句只是以某种方式为您获取和格式化行
MySQL和MySQLi是两种不同的东西,但是它们使用的SQL没有什么不同(除了可能准备好的语句?)。
学习SQL是您要做的事情,要执行SQL,您将从现在开始使用mysqli.*
,因为mysql.*
函数是
我只是想指出这些事情,以消除您可能已经或将来会遇到的一些困惑。:)
更多关于mysqli的阅读,如果你刚刚开始,一切都有点复杂,但这很好——理解你能做什么,努力理解你不能做什么
编辑2(19-11-2015)
$row
数组中的索引与ID
和ID
完全不同。一个将导致未定义索引
错误
我注意到在您的输出中,id
键实际上是小写的,所以我会尝试更改为小写
祝你好运 以下代码可用于从SQL响应生成ID数组:
// Multidimensional array.
// main array by id with text and parent in secondary array
// tryed going by the second diagram
$arr = array();
$hent_folder = mysql_query("SELECT id, text, parentID FROM folders");
while($row = mysql_fetch_array($hent_folder))
{
$arr[$row['id']]['text'] = $row['text'];
$arr[$row['id']]['parentID'] = $row['parentID'];
}
$ids_array = array();
foreach($idsFromDb as $row)
{
$ids_array[] = $row['id'];
}
echo print_r($ids_array[0]) ;
以下代码可用于从SQL响应生成ID数组:
$ids_array = array();
foreach($idsFromDb as $row)
{
$ids_array[] = $row['id'];
}
echo print_r($ids_array[0]) ;
您可以使用PDO轻松地实现此结果。它有一个称为
PDO::fetch_GROUP
的获取模式,当与PDO::fetch_ASSOC
结合使用时,将生成所需的数组
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
$stmt = $pdo->prepare('SELECT id, text, parentID FROM folders');
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
您可以使用PDO轻松地实现此结果。它有一个称为
PDO::fetch_GROUP
的获取模式,当与PDO::fetch_ASSOC
结合使用时,将生成所需的数组
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
$stmt = $pdo->prepare('SELECT id, text, parentID FROM folders');
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
$array[$row['ID']]=$row代码>$array[$row['id']]=$row
如果你是php新手,那么我的第一个建议是放弃mysql_*函数,研究pdo和MySQlith OP实际上已经这样做了,正如他在实际问题中所说的先生们,mysql_*
和mysqli_*
并没有太大的不同,但再一次,不是每个人都有相同的经验,否则我们就不需要SO@SidneyLiebrand-OP没有按照原来的问题那样做,这是从…..开始添加的。。。。。虽然最初的列名中没有显示大小写,但这是一个区分大小写的问题$array[$row['ID']]=$row代码>$array[$row['id']]=$row
如果你是php新手,那么我的第一个建议是放弃mysql_*函数,研究pdo和MySQlith OP实际上已经这样做了,正如他在实际问题中所说的先生们,mysql_*
和mysqli_*
并没有太大的不同,但再一次,不是每个人都有相同的经验,否则我们就不需要SO@SidneyLiebrand-OP没有按照原来的问题那样做,这是从…..开始添加的。。。。。虽然原文没有在列名中给出大小写,并且