我想创建一个自定义toc(目录表),将从数组生成。例如,数组值看起来像这样:
$angka = array(1,11,12,13,2,21,22,23);
当包含超过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),并将显示"未定义的偏移量"通知。我怎样才能避免呢?
假设你的数组将始终具有相同的模式(在main sub之后,有接下来的三个sub)您可以像这样简化代码
<?php
$angka = array(1,11,12,13,2,21,22,23);
echo "<ul>";
$counter = 0;
foreach($angka as $value){
$quotient = $value / 10;
if ($quotient == 0) { // Meaning not - sub
echo "<li>ini bukan sub</li>";
$counter = 0; // reset sub - index
}
else { // Display subs
switch ($counter) { //Select what sub type to be displayed
case 0: // first sub
echo "<li><ul>";
echo "<li>ini buka sub</li>";
break;
case 1: //second sub
echo "<li>ini sub tengah</li>";
case 2: //third sub
echo "<li>ini sub akhir</li>";
echo "</ul></li>";
}
$counter++;
}
}
echo "</ul>";
在这种情况下,您可以摆脱现在遇到的索引问题。