我想創建一個將從數組中生成的自定義toc(目錄)。例如數組值看起來像這樣:PHP數組定製循環
$angka = array(1,11,12,13,2,21,22,23);
當值containts多於1位(11,12,13,21,22,23等)應該被分類爲「子」。否則,應將其分類爲「非子」。所需的輸出應該是這樣的https://jsfiddle.net/thekucays/azordcv5/2/
爲了實現這一點,我循環數組,檢查當前索引,以前的索引和下一個索引長度。的代碼看起來是這樣
<?php
$angka = array(1,11,12,13,2,21,22,23);
$hitung = count($angka);
$keys = array_keys($angka);
echo "<ul>";
foreach(array_keys($keys) as $k){
if(strlen($angka[$keys[$k]])==1){
echo "<li>ini bukan sub</li>";
}
else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])==1){ //buka sub baru
echo "<li><ul>";
echo "<li>ini buka sub</li>";
}
else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])>1 && strlen($angka[$keys[$k+1]])>1){ //ini masih di dalem sub
echo "<li>ini sub tengah</li>";
}
else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])>1 && ($k<=$hitung || strlen($angka[$keys[$k+1]])==1)){ //akhir sub, tutup
echo "<li>ini sub akhir</li>";
echo "</ul></li>";
}
}
echo "</ul>";
?>
問題,在示例代碼,foreach循環將繼續循環,直到陣列長度1(其爲8),並且將顯示「未定義抵消」通知。我怎麼能阻止呢?
當你正在做'$ ankga'的'array_keys'時,你實際上變得'0,1..6,7'。你正在尋找'array_values'。 – Andrew
'$ angka [$ keys [$ k + 1]]'是非常令人費解的,因爲你可以剛剛做完foreach($ angka as $ k => $ v)''但你需要的是檢查'isset($ Angka [$ keys [$ k + 1]])''在嘗試使用它之前。 – AbraCadaver
@AbraCadaver我試圖使用isset,但它仍然顯示相同的通知...這對我來說非常混亂,因爲isset適用於我另一個非常非常簡單的情況:( – thekucays