我有工作代码将结果写入数组,但值加倍。这是代码:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "databasename";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$index = array();
$sql = "SELECT firstname, lastname, ID, parentID FROM table";
$result = $conn->query($sql);
while($row = $result->fetch_array()){
$rows[] = $row;
}
// create an index on id
foreach($rows as $row){
$index[$row['ID']] = $row;
}
// build the tree
foreach($index as $id => &$row){
if ($id === 0) continue;
$parent = $row['parentID'];
$index[$parent]['children'][] = &$row;
}
unset($row);
// obtain root node
$index = $index[0]['children'];
/* free result set */
$result->close();
/* close connection */
$conn->close();
// output json
echo json_encode($index, JSON_PRETTY_PRINT);
但它会像这样产生JSON
[
{
"0": "Luka",
"firstname": "Luka",
"1": "Some",
"lastname": "Some",
"2": "287",
"ID": "287",
"3": "277",
"parentID": "277"
},
{
"0": "John",
"firstname": "John",
"1": "Test",
"lastname": "Test",
"2": "4080",
"ID": "4080",
"3": "277",
"parentID": "277"
}
]
有人能告诉我上面的PHP代码有什么问题,所以它不会在JSON中产生双重记录。 谢谢
答案 0 :(得分:0)
mysqli-&gt; fetch_array()使用MYSQLI_BOTH作为默认结果类型。使用正确的参数来获得您想要的结果。
mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] )
结果类型:
此可选参数是一个常量,指示什么类型 应该从当前行数据生成数组。可能 此参数的值是常量MYSQLI_ASSOC,MYSQLI_NUM, 或MYSQLI_BOTH。
通过使用MYSQLI_ASSOC常量,此函数将起作用 与mysqli_fetch_assoc()完全相同,而MYSQLI_NUM将表现出来 与mysqli_fetch_row()函数完全相同。最后的选择 MYSQLI_BOTH将创建一个具有两者属性的单个数组。
答案 1 :(得分:0)
更改
$row = $result->fetch_array()
要
$row = $result->fetch_array(MYSQLI_ASSOC)
答案 2 :(得分:0)
获取结果时,请使用MYSQLI_ASSOC
选项。
此外,您可以通过在初始while
循环中通过ID立即对其进行索引来保存循环数据。
$sql = "SELECT firstname, lastname, ID, parentID FROM table";
$result = $conn->query($sql);
$index = [];
while(($row = $result->fetch_array(MYSQLI_ASSOC))) {
$index[$row['ID']] = $row;
}