首先,如果我不明白你的問題,請道歉。
讓我解釋一下你的問題,我的理解是:
第一頁
你顯示它包含複選框名爲「類別」形式和值是特定的主要類別的IDS
在第二頁着陸
您填充數組(我會稱之爲$ _SESSION [ 'categories_checked'] )與檢查類別
在第二頁
您顯示1級你顯示主頁上的類別以同樣的方式的子類別。比方說,表單元素名稱是「subcat1」
在第三頁的目標
您填充數組與檢查小類
在第三(我想$ _SESSION [「subcats1_checked」]稱呼它)頁面
顯示級別2的子類別與在主頁面上顯示類別的方式相同。比方說,表單元素名稱是檢查小類
在第四個「subcat2」
在第四頁着陸
您填充數組(我會稱之爲$ _SESSION [「subcats2_checked」])頁面
顯示級別3的子類別與在主頁面上顯示類別的方式相同。比方說,表單元素名稱是檢查子類別 「subcat3」
在最後一頁上着陸
您填充數組(我會稱之爲$ _SESSION [ 'subcats3_checked'])
我回答
從我的角度來看,我寧願做到以下幾點:
- 總是使用相同的變量名(以HTML形式和PHP),這樣的代碼可以大大提高
- optionnaly使用,其中將包括水平
巢您的數組一個隱藏的表單元素
$_SESSION['categories'] = [
3 => [
56 => [
89 => [
121 => [1,2,3,4,5,],
],
],
],
];
這種表示似乎更接近現實,應該更容易顯示。
下一步是創建一個遞歸函數,您將在該函數處傳遞一個單步形式的結果數組和$ _SESSION ['categories']變量。
讓我知道如果解決方案是適合您的方式......如果需要,我可以幫助您。
所以,遞歸是成功的關鍵,但...
有遺漏......爲了治療你的結果,並有PHP數組我mentionned,你將有來構建你的形式的方式:
第一頁
<input type="checkbox" name="category[0]" value="1" /> Cat1 name
<input type="checkbox" name="category[0]" value="2" /> Cat2 name
第二頁
Subcats of cat 1
<input type="checkbox" name="category[1]" value="110" /> SubCat1 name
<input type="checkbox" name="category[1]" value="222" /> SubCat2 name
Subcats of cat 2
<input type="checkbox" name="category[2]" value="110" /> SubCat1 name
<input type="checkbox" name="category[2]" value="222" /> SubCat2 name
這樣,您將能夠避免級別輸入元素,因爲子類別現在僅由其父級定義。 當然,這意味着每個類別和子類別都有不同的ID(如果不是這種情況,技巧是可能的)。
這裏是一個快速和骯髒的代碼應該幫助你
<?php
/**
* Created by PhpStorm.
* User: dvienne
* Date: 31/05/2017
* Time: 15:16
*/
function treatCategories($parentCatId, $selectedId, $categories) {
foreach($categories as $categoryID => $category) {
if(empty($category) AND ($categoryID==$parentCatId)) {
$categories[$categoryID][$selectedId] = [];
break;
} elseif(is_array($category) AND empty($category)) {
/** RECURSION */
treatCategories($parentCatId, $selectedId, $category);
}
}
$_SESSION['categories'] = $categories;
}
$userSelection = $_POST['categories'];
$level = $_POST['level'];
if(!empty($_SESSION['categories'])) {
$categories = $_SESSION['categories'];
} else {
$categories = [];
}
if(!empty($categories)) {
foreach($userSelection as $parentCatId => $selectedId) {
treatCategories($parentCatId, $selectedId, $categories);
}
} else {
foreach($userSelection as $catId) {
$categories[$catId] = [];
}
$_SESSION['categories'] = $categories;
}
請注意
這顯然是不以治療數據,因爲腳本會掃描整個一個優化的方式插入其值之前的類別數組。 您應該考慮使用AJAX查詢的單頁解決方案。
這個問題與JSON無關。你想在本地PHP數據結構(數組,對象)中創建你的「樹結構」,然後如果你想要一個JSON版本,把它序列化爲'json_encode'。 – JAAulde
O知道,但問題是,我不知道如何做樹結構 –
我明白這一點。我的觀點是你一直在談論JSON,並將問題標記爲JSON。如果你想得到很好的幫助,請將你的問題集中在真正的問題上。 – JAAulde