繁体   English   中英

PHP MySql选择数组

[英]PHP MySql select to array

我有工作代码将结果写入数组,但值加倍。 这是代码:

<?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中产生双重记录。 谢谢

mysqli-> 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将创建一个具有两者属性的单个数组。

更改

$row = $result->fetch_array()

$row = $result->fetch_array(MYSQLI_ASSOC)

获取结果时使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM