回归真实;继续脚本直到结束相同的功能?

时间:2010-08-27 21:28:35

标签: php

我的功能是这样的

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语句?

4 个答案:

答案 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。为什么所有这些与单独的查询?我会:

  1. 使用SELECT...WHERE...IN获取所有匹配的图像记录。
  2. 遍历这些记录并删除文件,将删除的图像的主键值放在第二个数组中。
  3. 使用DELETE...WHERE...IN查询来终止所有记录。
  4. 这样你只能击中数据库两次。它可能类似于以下内容:

    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。没有必要让它循环。

http://www.tizag.com/phpT/forloop.php可能会有所帮助。

答案 3 :(得分:0)

它将返回它的第一个return语句。在这种情况下,函数中有5行......它永远不会进入if语句