0

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

4 に答える 4

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);
    }
于 2013-08-09T10:32:51.367 に答える
0

欠落: $array2 =array();

$array2 と $array1 は配列ではありません。

覚えておいてください: 条件はブロックの最初ではなく最後にテストされるため、ブロックは少なくとも 1 回実行されます。条件が真の場合、ブロックの先頭に戻って再度実行します。do..while ループは、基本的に逆の while ループです。while ループは「条件が true である間ループし、このコード ブロックを実行する」と言い、do..while ループは「このコード ブロックを実行し、条件が true である間ループする」と言う。

したがって、do{} ブロックに require がありません...そして最後に、require('./Step0.php'); から致命的なエラーが発生しました。

ありがとう

于 2013-08-09T11:04:37.733 に答える
0

コアを実行し、$diffe_array を array(1, 2, 3) に初期化し、ループを 3 回処理したので、初期データ ($array1, $array2) に問題がある可能性があります。また、DonCallisto が述べたように、配列を逆方向に反復処理する簡単な方法があります。たとえば、次のように for ループを適宜使用します。

for ($i = count($diffe_array)-1; $i>=0; $i--) {
    echo $diffe_array[$i];
}
于 2013-08-09T10:27:40.470 に答える