2017-03-02 17 views
1

配列に結果を書き込む作業コードがありますが、値は2倍になります。ここでは、コードです: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で二重のレコードを生成しないようにaboove PHPコードと間違っているものを私に言うことができるこの

[ 
    { 
    "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" 
    } 
] 

のようなJSONを生成します。 ありがとう

+2

可能性のある重複した[私の配列内の二重の結果(mysqlの\ _fetch \ _array)](http://stackoverflow.com/questions/9556794/double-results-in-my-array-mysql-fetch-アレイ) – 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_NUMは同一mysqli_fetch_row()関数に に動作する一方、同一mysqli_fetch_assoc()に を動作します。この機能をMYSQLI_ASSOC定数を用いることにより

。最後のオプション MYSQLI_BOTHは、両方の属性を持つ単一の配列を作成します。

0

変更

$row = $result->fetch_array() 

$row = $result->fetch_array(MYSQLI_ASSOC) 
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; 
} 
+0

ありがとうございました! – ZMik