2017-03-02 109 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