我的While循环不起作用,为什么


My While loop is not working, why?

我有一个关于php中循环关系的问题。我试着用我的数组元素来进行动作,总是用最后一个元素。要做到这一点,我需要:

1-知道我的数组不是空的。

2-获取我的数组的最后一个项目名称。这是因为我需要它来执行Step0.php脚本。

3-删除数组的最后一项。

我想重复这个操作,直到数组的值为零,然后进入这个循环。

我试过了,但运气不好-(

知道吗?

$array2;
$array1;
$diffe_array = array_diff($array2, $array1);
//CREATE THE CONDICTION
$diffe=count($diffe_array);
do {
     $lastone=end($diffe_array);
     require('./Step0.php');
     $extract=array_pop($diffe_array); 
     $diffe=count($diffe_array);
     print_r($diffe_array);
} while ($diffe > 0);
echo 'JUST YOU HAVE 0 ITEMS IN YOUR ARRAY!!!!';

为了完成我的问题,我认为有必要(通过这个例子):

第1步。-我有这样的$array2:

array2([0]=>00004.csv[1]=>00007.csv[2]=>00005.csv[3]=>00003.csv[4]=>00002.csv[5]=>00001.csv[6]=>00006.csv[7]=>00000.csv)

步骤2。-我有&数组1如下:

array1([0]=>00004.csv[1]=>00003.csv[2]=>00002.csv[3]=>00001.csv[4]=>00000.csv)

步骤3。-我用array_diff($array2,$array1)计算difft_array:

different_array([1]=>00007.csv[2]=>00005.csv[6]=>00006.csv)

步骤4。-我需要创建一个循环来从我的differen_array中提取每个项目,并在我的另一个脚本Step0.php中使用它(这个脚本打开与我在differen_aarray中的最后一个项目同名的文件,并将其信息共享到数据库中)。我需要这样做,直到我的different_array为空,所以它从循环中出来。

顺便说一下,Step0.php的内容是:

<?php
function Conection() 
{
       if (!($link=pg_connect("host=xxxxx port=xxxx dbname=xxxxx user=xxxxx password=xxxxx")))  { 
           echo "Error connecting to the database.";
           exit();
       }
       return $link;
}
require_once('./process.php');//This is the before file
$rute="/rute/to/my/file/";
$end= $rute.$lastone;
$row = 0;
$handle = fopen($end, "r"); 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    $row++;
    echo '<b><br/><br/>';
    $request = "insert into table(column1,column2,column3,column4) values("; 
    for ($c=0; $c < $num; $c++) { 
        if ($c==($num-1))
              $request = $request."'".$data[$c] . "'";
        else
              $request = $request."'".$data[$c] . "',";
    }
    $request = $request.");"; 
    echo $request."<br>";  
     $union=Conection();
     $result=pg_query($union, $request); 
     pg_close($union);
}
fclose($handle);
?>

首先,根据您的代码,$array1$array2没有值,所以我认为array_diff()函数会返回一个错误。

其次,对于您的代码,您将在每个循环中包含Step0.php。这不是一个好方法。

最后一点:如果在进入循环并只弹出一个元素之前就知道计数,为什么每次都使用count()?递减$diffe变量不是更好吗?

我刚刚运行了您的核心,将$differen_array初始化为array(1,2,3),循环处理了3次,所以您的初始数据($array1,$array2)可能有问题。此外,正如DonCallisto提到的,有更简单的方法可以向后迭代数组——例如,相应地使用for循环,比如:

for ($i = count($diffe_array)-1; $i>=0; $i--) {
    echo $diffe_array[$i];
}

像这样使用while循环

 while ($diffe > 0) {
         $lastone=end($diffe_array);
         require('./Step0.php');
         $extract=array_pop($diffe_array); 
         $diffe=count($diffe_array);
         print_r($diffe_array);
    }

缺少:$array2=array();

$array2和$array1不是数组。

请记住:该条件在块的末尾而不是开头进行测试,因此该块将至少执行一次。如果条件为true,我们跳回到块的开头并再次执行它。do..while循环基本上是一个反向while循环。while循环表示"在条件为true时循环,并执行此代码块",do..while循环则表示"执行此代码段,在条件为false时循环"。

因此,在您的do{}块中缺少require。。。最后,您从require('./Step0.php)得到了一个致命错误;

感谢