【问题标题】:My While loop is not working, why?我的 While 循环不起作用,为什么?
【发布时间】:2013-08-09 10:17:12
【问题描述】:

我有一个与 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);

?>

【问题讨论】:

  • $array1$array2 中的内容
  • 为什么不简单地 array_reverse 你的 $diffe_array;然后 foreach($diffe_array as $extract)?
  • 不错的选择!!我会试试!!谢谢

标签: php while-loop do-while


【解决方案1】:

首先 - 按照你的代码 - $array1$array2 没有值,所以我想 array_diff() 函数会返回一个错误。

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

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

【讨论】:

  • 首先,感谢您的回答。对不起,我的解释不准确。 1.-我们假设 $array1 和 $array2 不为空。所以 $diffe_array 也不为空。 2.- 我不知道执行第二个脚本的其他方法。 3.- 我使用 count 来控制操作(然后我会写 echo)谢谢。
  • @user2343971:你必须写一个“好”的例子才能有一个“好”的答案。所以,请用你的真实代码更新该代码:如果上面是真实代码,你不能假设“数组不为空”:)
【解决方案2】:

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

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

【讨论】:

  • 感谢叶子节点!!我的数组是: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 ) Array1 ( [0] => 00004.csv [1] => 00003.csv [2] => 00002.csv [3] => 00001.csv [4] => 00000.csv ) Diffe_array ( [1] => 00007.csv [2] => 00005.csv [6] => 00006.csv ) 我的计数(diffe_array) 是 3。有了这些数据,我的 do-while 循环只处理了 1 次。
  • 检查 step0.php 是否在任何时候都没有修改 $diffe_array - 例如您可以在循环结束时执行 print_r($diffe_array)。
  • 然后在几个测试中,我可以说我的 while 循环正在工作,但问题出在 step0.php 中,但我不知道确切的位置。当进入while它不执行step0.php文件。我用代码o stept0.php 编辑了原始问题
【解决方案3】:

像这样使用while循环

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

【讨论】:

  • Chirag ode,我尝试了“经典”,结果是一样的。 :(谢谢。
【解决方案4】:

缺少:$array2 =array();

$array2 和 $array1 不是数组。

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

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

谢谢

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2022-12-12
    • 1970-01-01
    • 2022-01-03
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多