我的功能是这样的
function multiple_delete($checkbox, $table, $url, $picture1 = 0, $picture2 = 0, $picture3 = 0){
$count = count($checkbox);
for($j=0;$j<$count;$j++)
{
$delete_id = $checkbox[$j];
$query = "SELECT * FROM $table WHERE id = '$delete_id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
return true;
if( $picture1 !== 0 && $picture2 !== 0 && $picture3 !== 0)
{
$pic_1 = $picture1;
$pic_2 = $picture2;
$pic_3 = $picture3;
unlink($pic_1);
unlink($pic_2);
unlink($pic_3);
return true;
}
if( $picture1 !== 0 && $picture2 !== 0 && $picture3 == 0 )
{
$pic_1 = $picture1;
$pic_2 = $picture2;
unlink($pic_1);
unlink($pic_2);
return true;
}
}
for($i=0;$i<$count;$i++) {
$del_id = $checkbox[$i];
$sql = "DELETE FROM $table WHERE id='$del_id'";
$result_delete_data = mysql_query($sql);
}
alert('Deleted Successfully');
redirect_url($url);
return true;
}
在上面的函数中,如果第一个或第二个条件返回true,那么它会继续通过下面的for循环还是只是停止脚本?
如果return true将暂停脚本
编辑:如果我从if条件中删除return语句可以吗?我们是否有必要在用户定义的函数中定义return语句?
答案 0 :(得分:1)
它将退出该功能。循环不会继续。
您可以轻松测试它:
foreach(range(0,10) as $int) {
if($int > 5) {
return;
}
echo $int . PHP_EOL;
}
打印
0
1
2
3
4
5
答案 1 :(得分:1)
任何时候使用return
来停止执行函数return
。我想您可能正在寻找continue
和/或break
。为什么所有这些与单独的查询?我会:
SELECT...WHERE...IN
获取所有匹配的图像记录。DELETE...WHERE...IN
查询来终止所有记录。 这样你只能击中数据库两次。它可能类似于以下内容:
function multiple_delete($checkbox, $table, $url, $picture1 = 0, $picture2 = 0, $picture3 = 0){
$count = count($checkbox);
$select = sprintf('SELECT * FROM %s WHERE id IN (%s)', $table, implode(',',$checkbox));
$imagesResult = mysql_query($select);
$deletes = array();
while(false !== ($record = mysql_fetch_array($imagesResult))
{
if( $picture1 !== 0 && $picture2 !== 0 && $picture3 !== 0)
{
$pic_1 = $picture1;
$pic_2 = $picture2;
$pic_3 = $picture3;
unlink($pic_1);
unlink($pic_2);
unlink($pic_3);
continue;
}
if( $picture1 !== 0 && $picture2 !== 0 && $picture3 == 0 )
{
$pic_1 = $picture1;
$pic_2 = $picture2;
unlink($pic_1);
unlink($pic_2);
continue;
}
$deletes[] = $record['id'];
}
$delete = sprintf('DELETE FROM %s WHERE id IN (%s)', $table, implode(',',$deletes));
$result_delete_data = mysql_query($delete);
alert('Deleted Successfully');
redirect_url($url);
}
在上面,如果处理了continue
将会转到循环的下一次迭代...同样使用break
代替将完全停止循环并继续前进到从DB中删除的下一个代码块。我不确定你在这里尝试使用if
语句来做什么......你可能甚至不需要使用continue
/ break
...你能详细说明你真正需要做什么吗?
数据库之外的最后一点也没有意义......我假设你的redirect
函数用header
执行某些操作将它们发送到另一个页面......如果是这样的话当发生这种情况时,你的函数会停止,因此返回任何结果都没有意义。然后你做了一个alert
,我不知道你做了什么,但我认为它将消息添加到页面redirect
发送给他们的会话变量?
答案 2 :(得分:1)
假设你已经正确粘贴了这个,你永远不会执行if语句,因为它们遵循一个return语句。我猜你需要重新考虑第一个for循环,因为你正在查询数据库,得到一行,然后返回true。没有必要让它循环。
答案 3 :(得分:0)
它将返回它的第一个return语句。在这种情况下,函数中有5行......它永远不会进入if语句