2011-05-15 58 views
1

我想如果寫一堆的嵌套是有點如下語句:

if (strcmp($data['reports'][$i][$j],$data['reports'][$i][$j-1])){ 

,但大家都知道,你必須寫一個單獨的,如果如果是0語句,因爲沒有按0-1不存在。

if ($j == 0){ 
//First report, to prevent OBOB 
     echo "<br/><a href = ".$filename.">".$data['reports'][$i][$j]."</a>"; 

#-> You would have to write two more statements here to test for province... 
} 

    if ($j >= 1){ 
//All subsequent reports 
     if (strcmp($data['reports'][$i][$j],$data['reports'][$i][$j-1])){ 
     echo "<br/><a href = ".$filename.">".$data['reports'][$i][$j]."</a>"; 
#-> You would have to write two more statements here to test for province... 
    } 

現在,想象一下,如果你必須測試其他依賴值的連續相同性嗎?

它從4到8至16個單獨的語句只是測試的這4 ...

所以,我只是有想法的東西垃圾到$ J = -1。

 $data['reports'][$i][-1]='aaaaaaaaaa'; 
// This would depend on the type of data you are 
// comparing I suppose it could be zeros. 
     $data['provinces'][$i][-1]='aaaaaaaaa'; 

有沒有更好的解決方案?

回答

3

你爲什麼不用0開始循環而不是0?也就是說,不是這樣的:

for ($j = 0; $j < count($data['reports'][$i]); $j++) 

做到這一點:

for ($j = 1; $j < count($data['reports'][$i]); $j++) 

這是毫無意義的第一個數組元素的前一個比較反正,所以就跳過它。

+0

我想我可以。循環內部還有其他一些本質上不具有比較性的東西,它們實際上應該從0開始。就像按字母順序排序一樣。你應該從元素0開始,對吧?你認爲將這些分離出來是否是一個好主意? – 2011-05-15 00:17:57

+0

@RVWard - 也許你可以分裂出來呢?比如,在數組中循環兩次 - 第一次從0開始,並進行排序和處理;第二次從1開始並進行比較。整體效率不會因此受到太大影響。 – 2011-05-15 00:19:58

+0

這是一個好主意,並且更難以顯示我的同伴編碼者。大聲笑。 – 2011-05-15 00:20:47

1

除非你需要對第一個元素做些什麼,否則Vilx的答案就是要走的路。通過代碼的外觀,你總是迴應第一個元素,而其他元素需要if條件。我在猜測你對重複代碼的關注(好),只需將連續迴響的代碼移動到一個新方法中,並有條件地調用它即可。

相關問題