2
我想以獲得所需的回報,我想用一個特定的mysqli表,它具有以下結構的JSON格式:一個mysqli的表與PHP
id | name | parentid
--------------------
1 | Boss | 0
2 | Bob | 1
3 | Chef1 | 1
4 | Chef2 | 1
5 | Lara | 3
6 | Kim | 4
7 | Nick | 1
63 | Oldboss | 20
我需要爲每個父命名新:
[
{
"name": "Boss",
"attributes": {
"data-id": "1"
},
"children": [
{
"name": "Bob",
"attributes": {
"data-id": "2"
}
},
{
"name": "Chef1",
"attributes": {
"data-id": "3"
}
},
{
"name": "Chef2",
"attributes": {
"data-id": "4"
}
},
{
"name": "Nick",
"attributes": {
"data-id": "7"
}
}
]
},
{
"name": "Chef1",
"attributes": {
"data-id": "3"
},
"children": [
{
"name": "Lara",
"attributes": {
"data-id": "5"
}
}
]
},
{
"name": "Chef2",
"attributes": {
"data-id": "4"
},
"children": [
{
"name": "Kim",
"attributes": {
"data-id": "6"
}
}
]
}
]
這就是我需要爲每個擁有孩子的需要得到在頂部,但他的父母也下顯示的名稱。這將在使用while格式的回聲時創建相同的結果。但我無法獲得數組/ JSON來構建我想要的結果。這是我目前:
$returnarray = array();
$sql = "SELECT DISTINCT
t_names.name AS Name2,
t_names.id AS ID2
FROM t_names
INNER JOIN t_names t_names_1
ON t_names.id = t_names_1.parentid
WHERE t_names.parentid <> 63
AND t_names.id <> 63";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){
$subarray = array(
"data-id"=> $row['ID2']
);
$headarray = array(
"name"=> $row2['Name2'],
"attributes"=> $subarray,
"children"=>$rowarray2
);
$sql2 = "SELECT DISTINCT id, name, parentid FROM t_names WHERE parentid = '{$row[ID2]}' ";
$result2 = mysqli_query($conn, $sql2);
while($row2 = mysqli_fetch_assoc($result2)){
$subarray2 = array(
"data-id"=> $row2['id']
);
$rowarray = array(
"name"=> $row2['Name'],
"attributes"=> $subarray2
);
$rowarray2[] = $rowarray;
}
$returnarray[] = $headarray;
}
echo "<pre>";
echo json_encode($returnarray, JSON_PRETTY_PRINT);
echo "</pre>";
上述結果確實創建了一個JSON格式導致代碼:
- Boss
Bob
Chef1
Chef2
Nick
-Chef1
Bob
Chef1
Chef2
Nick
Lara
-Chef2
Bob
Chef1
Chef2
Nick
Lara
Kim
所以它創建的組,但它一直使用先前組和數據在他們後面添加正確的名字。
我的數組有什麼問題?
不是'$ row [ID2]'指的是ID2作爲常量嗎?它存在於你的sql查詢中。 – Xorifelse
@Xor實際上,只有在變量本身用雙引號包裝時,引號纔是數組索引的可選項。 –
@jeff但是,如果包裹在單引號中,它根本就不是一個變量,而只是一個文字。這就提出了一個問題,如果你想讓它和常量一起工作,:)。無論哪種方式,我認爲這是一個不好的做法,污染代碼和不是。我寧願連接或sprintf它。 – Xorifelse