Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将垃圾填充到$array[-1]中以防止OBOB是一种不好的做法吗?_Php_Mysql - Fatal编程技术网

Php 将垃圾填充到$array[-1]中以防止OBOB是一种不好的做法吗?

Php 将垃圾填充到$array[-1]中以防止OBOB是一种不好的做法吗?,php,mysql,Php,Mysql,我试图编写一组嵌套的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['repo

我试图编写一组嵌套的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...
    }

有更好的解决方案吗?

为什么不以1而不是0开始循环呢?也就是说,与此相反:

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

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

将第一个数组元素与前一个数组元素进行比较是毫无意义的,所以跳过它。

为什么不以1而不是0开始循环呢?也就是说,与此相反:

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

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

不管怎样,比较第一个数组元素和前一个数组元素是没有意义的,所以跳过它。

除非您需要对第一个元素做些什么,否则Vilx的答案是正确的。从代码的外观来看,您总是回显第一个元素,而其他元素则需要if条件。我猜您担心的是重复代码(很好),只需将回显行的代码移动到一个新方法中,并有条件地调用它。

除非您需要对第一个元素执行某些操作,否则Vilx的答案是可行的。从代码的外观来看,您总是回显第一个元素,而其他元素则需要if条件。我猜您担心的是重复代码(很好),只需将回显行的代码移动到一个新方法中,并有条件地调用它。

我想我可以。循环中还有其他本质上不可比较的东西,它们应该从0开始。比如,按字母顺序排序。应该从元素0开始,对吗?你认为把这些从同一个循环中分离出来是个好主意吗?@RVWard-也许你可以把它分离出来?比如,在数组上循环两次——第一次从0开始,然后进行排序;第二次从1开始,进行比较。总体效率不会因此受到太大的影响。这是一个好主意,而且向我的同事们展示时也不会那么尴尬。Lol.或者,从
$j=0
执行循环,但在每次比较之前测试非空
$j
如果($j&&strcmp($data['reports'][$i][$j],$data['reports'][$i][$j-1])
。这样,执行顺序与原始代码相同,看起来也不难看。我不知道你的意思是什么,当0上有元素时,我怎么能从1开始?我一点出发的时候,他们就被忽略了。如果我从1开始,我也会遇到同样的问题,因为无论如何我都要打印0,这会使我回到代码的几何复制。。。我错过什么了吗?我想我会的。循环中还有其他本质上不可比较的东西,它们应该从0开始。比如,按字母顺序排序。应该从元素0开始,对吗?你认为把这些从同一个循环中分离出来是个好主意吗?@RVWard-也许你可以把它分离出来?比如,在数组上循环两次——第一次从0开始,然后进行排序;第二次从1开始,进行比较。总体效率不会因此受到太大的影响。这是一个好主意,而且向我的同事们展示时也不会那么尴尬。Lol.或者,从
$j=0
执行循环,但在每次比较之前测试非空
$j
如果($j&&strcmp($data['reports'][$i][$j],$data['reports'][$i][$j-1])
。这样,执行顺序与原始代码相同,看起来也不难看。我不知道你的意思是什么,当0上有元素时,我怎么能从1开始?我一点出发的时候,他们就被忽略了。如果我从1开始,我也会遇到同样的问题,因为无论如何我都要打印0,这会使我回到代码的几何复制。。。我错过什么了吗?