2017-03-02 58 views
1

我有工作代码写入数组结果,但价值倍增。这里是代码:PHP MySql选择阵列

<?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" 
    } 
] 

有人能告诉我什么是错的aboove PHP代码,因此它不会在JSON产生双重记录。 谢谢

+2

的可能的复制[在我的数组双结果(MySQL的\ _fetch \ _array)](http://stackoverflow.com/questions/9556794/double-results-in-my-array-mysql-fetch- array) – TopCheese

回答

0

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

0

变化

$row = $result->fetch_array() 

$row = $result->fetch_array(MYSQLI_ASSOC) 
0

时,取结果使用MYSQLI_ASSOC选项。 另外,您可以通过在初始while循环中立即通过标识索引来保存循环数据。

$sql = "SELECT firstname, lastname, ID, parentID FROM table"; 
$result = $conn->query($sql); 
$index = []; 

while(($row = $result->fetch_array(MYSQLI_ASSOC))) { 
    $index[$row['ID']] = $row; 
} 
+0

非常感谢! – ZMik