-1

基本的に、次のような foreach ループがあります。

foreach($_POST['id'] as $key => $id) {
    $qty = $_POST['qty'][$key];
    $bin_location = $_POST['bin_location'][$key];
    $pdi_required = $_POST['pdi_required'.$key][0];
    $pdi_completed = $_POST['pdi_completed'][$key];
    $serial_no = $_POST['serial_no'][$key];
    $movement_by = $_POST['movement_by'][$key];
    $date_moving = $_POST['date_of_movement'][$key];
    $special_instructions = $_POST['special_instructions_admin'][$key];
    $status = strtolower($_POST['status'][$key]);

    $sql_update = "UPDATE products SET status='$status' WHERE job_id='$id'";

    $this->db->query($sql_update);
}

if ($status == 'rejected') {
    $sql_job_update = "UPDATE jobs SET status='rejected' WHERE job_id='$id'";
} elseif ($status =='pending' || $status =='returning') {
    $sql_job_update = "UPDATE jobs SET status='pending' WHERE job_id='$id'";
} else {
    $sql_job_update = "UPDATE jobs SET status='approved'";
}

しかし、私が最も興味を持っているのは最後の部分です ( if ($status == whatever)。foreach から可能な限り低い値を取得するにはどうすればよいですか?

これは、2 つのテーブルjobsがあり、完了したジョブのテーブルがproductsあり、ジョブ内で要求された製品であるためです。何らかの理由で製品が拒否された場合、ジョブ全体が失敗であるため、ジョブのステータスは拒否されます。拒否されておらず、保留中の場合は、保留中のままにします。すべてのフィールドが承認された場合は、ジョブ ステータスを承認済みに設定します。

本当に必要なのは、foreach ループ内のいずれかのオカレンス内で特定のステータスが true かどうかを取得し、それが true の場合は、ステータスをその値に設定することだけです。

4

2 に答える 2

1

ループの前に false に設定した別の変数を使用します。ループ内で、特定のステータスを取得した場合は true に設定します。

編集: または、考慮する必要がある可能性のあるステータス値が 2 つ以上あるように思われるため、最初に「承認済み」に設定し、2 つのステータス値のどちらが低いかを示す比較関数を使用します。次に、ループ内でその関数を使用して、グローバル ステータスをそれ自体と現在のループ反復のステータスの最小値に設定します。

于 2013-08-23T11:25:07.570 に答える
1

2 番目の変数を使用して、ジョブが失敗したかどうかを追跡します

$jobStatus = 0;
foreach($_POST['id'] as $key => $id)
{
    $qty = $_POST['qty'][$key];
    $bin_location = $_POST['bin_location'][$key];
    $pdi_required = $_POST['pdi_required'.$key][0];
    $pdi_completed = $_POST['pdi_completed'][$key];
    $serial_no = $_POST['serial_no'][$key];
    $movement_by = $_POST['movement_by'][$key];
    $date_moving = $_POST['date_of_movement'][$key];
    $special_instructions = $_POST['special_instructions_admin'][$key];
    $status = strtolower($_POST['status'][$key]);

    //If any of the statuses are rejected then set
    //the job as failed, otherwise it will stay as FALSE
    if( $status == "rejected") {
        $jobStatus = 1;
    } else if( ($status == "pending" || $status == "returning") && $jobStatus != 1) {
        $jobStatus = 2;
    }

    $sql_update = "UPDATE products SET status='$status' WHERE job_id='$id'";

    $this->db->query($sql_update);
}
if ($jobStatus == 1) {
      $sql_job_update = "UPDATE jobs SET status='rejected' WHERE job_id='$id'";
} elseif ($jobStatus == 2){
      $sql_job_update = "UPDATE jobs SET status='pending' WHERE job_id='$id'";
} else {
      $sql_job_update = "UPDATE jobs SET status='approved'";
}
于 2013-08-23T11:26:23.777 に答える