0

PDO を使用して、1 行以上を受け取り、次のような配列に変換します。

while($row = $car_sales->fetch(PDO::FETCH_ASSOC)){          
    $car_id_array[] = $row["car_id"];
    $car_type_array[] = $row["car_type"];
    $dealer_id_array[] = $row["dealer_id"];
    $buyer_id_array[] = $row["seller_id"];
}

配列の各レベルを単純に「混合」してユニットとして機能させ、foreach ループを一緒に下って、$q クエリを順番に送信しようとしています。つまり、次のようなものです。

foreach($dealer_id_array as $dealer_id) {
    if ($car_type=='new') {
        if ($dealer_id==$buyer_id){
          $q = 'UPDATE car_sales SET new_cars=new_cars+1 WHERE dealer_id=:dealer_id';
        } else if ($dealer_id!=$buyer_id){
          $q = 'UPDATE car_sales SET new_cars=new_cars-1 WHERE dealer_id=:dealer_id';
    } else if ($car_type=='old') {
        if ($dealer_id==$buyer_id){
          $q = 'UPDATE car_sales SET old_cars=old_cars+1 WHERE dealer_id=:dealer_id';
        } else if ($dealer_id!=$buyer_id){
          $q = 'UPDATE car_sales SET old_cars=old_cars-1 WHERE dealer_id=:dealer_id';
    }
    $car_update = $dbhandle->prepare($q);
    $car_update->execute(array(':dealer_id' => $dealer_id));
}

while ループから取得した値が 1 つだけの場合、ループは最初の配列値で実行する必要があります。それ以上ある場合、 foreach は、順序を尊重しながら、 while ループからの deal_ids と同じ回数実行する必要があります。この例は機能しませんが、この問題を正しく解決するための解決策を探しています。これを行うための最も効率的な方法は何だと思いますか?

4

1 に答える 1

2

私はあなたを誤解しているかもしれませんが、 foreach ループを for ループに置き換えて、配列の 1 つを数えれば、問題は解決すると思います。

 for($i = 0; $i < count($dealer_id_array); $i++) {

そして、単に $i を使用して配列内の正しい項目にアクセスします。

$car_type_array[$i];

しかし、そうは言っても、そもそも最初の 4 つの配列のポイントがよくわかりません。そもそも foreach ループ内のコードを while ループ内で直接実行することはできませんか?

EDITED:コード例を修正する

于 2012-09-13T15:13:24.890 に答える