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

时间:2013-08-09 10:17:13

标签: php while-loop do-while

我对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!!!!';

为了完成我的问题,我认为有必要明确(在这个例子中):

Step1 .-我有这样的$ 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)

Step2 .-我有& array1像这样:

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

Step3 .-我用array_diff($ array2,$ array1)计算diffe_array:

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

Step4 .-我需要创建一个循环来从我的diffe_array中提取每个项目并在我的其他脚本中使用它Step0.php(这个脚本打开与我最后一个项目同名的文件)我的diffe_array并将其信息分享到数据库中)。我需要这样做,直到我的diffe_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);

?>

4 个答案:

答案 0 :(得分:0)

首先 - 关注您的代码 - $array1$array2没有值,因此我认为array_diff()函数会返回错误。

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

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

答案 1 :(得分:0)

我刚刚运行你的核心,初始化$ diffe_array到数组(1,2,3),并且循环处理了3次,所以你的初始数据($ array1,$ array2)可能有问题。此外,就像DonCallisto提到的那样,有更简单的方法可以向后迭代数组 - 例如,通过相应地使用for循环,例如:

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

答案 2 :(得分:0)

像这样使用while循环

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

答案 3 :(得分:0)

缺少:$ array2 = array();

$ array2和$ array1不是数组。

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

所以,在你的do {}块中,缺少需求...最后你的必须得到一个致命的错误('./ Step0.php');

由于