我想创建一个将从数组中生成的自定义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