从MySQL生成PHP数组,键值来自;id";柱

从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]

我有一个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] => 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循环”-它只是一个普通的PHP
while
循环,循环通过
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循环”-它只是一个普通的PHP
while
循环,循环通过
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没有按照原来的问题那样做,这是从…..开始添加的。。。。。虽然原文没有在列名中给出大小写,并且