我正在尝试编写一堆嵌套的if语句,如下所示:
if (strcmp($data['reports'][$i][$j],$data['reports'][$i][$j-1])){
但是众所周知,如果它是0,你必须写一个单独的if语句,因为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';
有更好的解决方案吗?
答案 0 :(得分:3)
为什么不用1而不是0开始循环?也就是说,而不是:
for ($j = 0; $j < count($data['reports'][$i]); $j++ )
这样做:
for ($j = 1; $j < count($data['reports'][$i]); $j++ )
无论如何将第一个数组元素与前一个数组元素进行比较是没有意义的,所以只需跳过它。
答案 1 :(得分:1)
除非你需要对第一个元素做些什么,否则Vilx的答案是要走的路。通过代码的外观,您总是回显第一个元素,而其他元素需要if条件。我猜你担心重复的代码(好),只需将回显的行代码移动到一个新方法中并有条件地调用它。