当前位置: 动力学知识库 > 问答 > 编程问答 >

php - test a condition for each array value in foreach loop

问题描述:

I might have put a not so right title of the question, apologies for that. I am sending some values in an array to be looped by foreach. Now, the use-case is that these are some id(s) related to a teaching responsibility and i am required to group them in a higher grouped responsibility. But the condition is that these id(s) have to be of same paper type.

Now, what i think i need to do in order to achieve this is to check the paper type for each array value and if they are not the same then i need to get out of the loop and give an error.

Note This is an AJAX request.

my code so far for looping through the array is:

$tid = mysql_real_escape_string($_POST['tid']);

$resp = $_POST['respid'];

$name_id = array_values($resp)[0];

$q1 = mysql_query("select p.p_name from papers p, iars ir where ir.id='$name_id' and ir.paperid = p.p_id");

$rows1 = mysql_fetch_array($q1);

$gresp_name = $rows1['p_name'];

$q2 = mysql_query("insert into giars set sessionid='$session', teacherid='$tid', name='$gresp_name'");

if(mysql_affected_rows()>0){

$gresp_id = mysql_insert_id();

}

foreach ($resp as $value ) {

$query = mysql_query("select p.ptype from papers p, iars ir where p.p_id = ir.paperid and ir.id='$value'");

$rows=mysql_fetch_array($query);

$ptype=$rows['ptype'];

// I am stuck here //

$q1 = mysql_query("insert into grp_resp(giars_id, iars_id, courseid, semester, paperid, groupid) select '$gresp_id', '$value', courseid, semester, PaperId, groupid from iars where id='$value'");

}

echo "done";

Now, how do i get out of the loop if the condition fails and give an appropriate response for the AJAX request.

网友答案:

You just have to loop it twice.
Consider the following code:

$paper_type = null; // we'll be storing the prototype here (all should match it)
$error = false;     // no errors as for now

foreach ($resp as $value) 
{
   $query = mysql_query("select p.ptype from papers p, iars ir where p.p_id = ir.paperid and ir.id='$value'");
   $rows = mysql_fetch_array($query);
   $ptype = $rows['ptype'];
   if($paper_type === null) $paper_type = $ptype; // initializing the "prototype"
   if($paper_type != $ptype) { $error = true; break; } // if it doesn't match the prototype - throw an error
}

// Displaying an error for AJAX
if($error) { echo "ERROR"; exit; }

// Otherwise - everything is fine, let's do the inserts!
foreach ($resp as $value) 
{
    $q1 = mysql_query("insert into grp_resp(giars_id, iars_id, courseid, semester, paperid, groupid) select '$gresp_id', '$value', courseid, semester, PaperId, groupid from iars where id='$value'");
}
网友答案:

I think this would work for you this is how to use contiune for more info check http://www.php.net/manual/en/control-structures.continue.php

$ptype=$rows['ptype'];
  If($ptype == 12 ) {
    continue;
   }else{ 
   do_something
   }
网友答案:

you can try something like the following

$array_ids = array(1, 2 …);#array values you are looking for
foreach($resp as $value){
   $query = mysql_query("select p.ptype from papers p, iars ir where p.p_id = ir.paperid and ir.id = '$value'");
   $rows = mysql_fetch_array($query);
   $ptype = $rows['ptype'];
   if(in_array($ptype, $array_ids)){
       #do your error stuff or what not
       break;
   }
   #or do
   if(in_array($ptype, $resp)){
       #do your error stuff or what not
       break;
   }
  $q1 = mysql_query("insert into grp_resp(giars_id, iars_id, courseid, semester, paperid, groupid) select '$gresp_id', '$value', courseid, semester, PaperId, groupid from iars where id = '$value'");

}

OR

$array_ids = array();
foreach($resp as $value){
   $query = mysql_query("select p.ptype from papers p, iars ir where p.p_id = ir.paperid and ir.id='$value'");
   $rows=mysql_fetch_array($query);
   $array_ids[] = $rows['ptype'];
}
foreach($resp as $value){
    if(in_array($value, $array_ids)){
        #do your error stuff or what not
        break; #or continue; if you don't want to break out of loop
    }
    $q1 = mysql_query("insert into grp_resp(giars_id, iars_id, courseid, semester, paperid, groupid) select '$gresp_id', '$value', courseid, semester, PaperId, groupid from iars where id='$value'");
    $rows=mysql_fetch_array($query);
}

OR you can see if you can't update your query to eliminate values

分享给朋友:
您可能感兴趣的文章:
随机阅读: