2015-05-29 132 views
-1

我想創建一個將從數組中生成的自定義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),並且將顯示「未定義抵消」通知。我怎麼能阻止呢?

+0

當你正在做'$ ankga'的'array_keys'時,你實際上變得'0,1..6,7'。你正在尋找'array_values'。 – Andrew

+0

'$ angka [$ keys [$ k + 1]]'是非常令人費解的,因爲你可以剛剛做完foreach($ angka as $ k => $ v)''但你需要的是檢查'isset($ Angka [$ keys [$ k + 1]])''在嘗試使用它之前。 – AbraCadaver

+0

@AbraCadaver我試圖使用isset,但它仍然顯示相同的通知...這對我來說非常混亂,因爲isset適用於我另一個非常非常簡單的情況:( – thekucays

回答

0

嗨假設你的數組將始終具有相同的模式(主要子後,有一個未來三年潛艇) 可以簡化這樣

<?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>"; 

在這種情況下,你的代碼,你可以擺脫您現在遇到的索引問題。

+0

不幸的是,模式並不總是這樣,所以還有另外一個選擇嗎?:) – thekucays

+0

然後編輯你的文章 – Sherlock