doudong7256 2017-08-15 22:42
浏览 52
已采纳

PHP for循环在第一次迭代后停止

For a project I am trying to do something in PHP. It requires a for loop and houses one as well. The for loop inside the initial loop functions as expected. It loops through the variables and stops once $i is equal to count($tasks)

However, when I copy paste the exact same loop on top of it, now working with $tasklists the loop stops after just one iteration. Mind you that when I tested count($tasklists) does return for example 3 and in the loop when I echo $i it does echo 0 the first time.

Here is the code with a bunch of comments.

// First let's break up all the tasklists the project has
$tasklists = explode('&', $data['proj_tasklists']);
// Now lets get all the tasks for each tasklist
for($i = 0; $i < count($tasklists); $i++) {
    // Get list_tasks from the tasklist
    $sql_get = "SELECT * FROM tasklists WHERE list_id='".$tasklists[$i]."'";
    $result_get = mysqli_query($con, $sql_get);

    if($result_get) {
        // Now load in the variable
        while($results = mysqli_fetch_array($result_get)) {
            $data['list_tasks'] = $results['list_tasks'];
        };
        // Now let's break that up
        $tasks = explode('&',$data['list_tasks']);
        // Now reset list_tasks
        $data['list_tasks'] = '';
        // Do something for every task
        for($i = 0; $i < count($tasks); $i++) {
            // And get the info for the set task
            $sql_get = "SELECT * FROM tasks WHERE task_id='".$tasks[$i]."'";
            $result_get = mysqli_query($con, $sql_get);

            if($result_get) {
                // Now load it's task_user in a variable
                while($results = mysqli_fetch_array($result_get)) {
                    $data['task_user'] = $results['task_user'];
                };
                // Check if that is the same as that of the user whom was deleted
                if($data['task_user'] == $data['user_id']) {
                    // If the Id is the same update it to ''
                    $sql_update = "UPDATE tasks SET task_user='' WHERE task_id='".$tasks[$i]."'";

                    if (mysqli_query($con, $sql_update)) {
                        // If that worked then add this to the list of addjusted IDs
                        // First check if the variable is empty or not
                        if($data['adjusted'] == '') {
                            // Add the ID plainly
                            $data['adjusted'] = $tasks[$i];
                        } else {
                            // Otherwise preceed the ID with an &
                            $data['adjusted'] = $data['adjusted'].'&'.$tasks[$i];
                        };
                    } else {
                        // Return an error
                        echo json_encode(array(
                            'status'=>'unsuccesful',
                            'where'=>3
                        ));
                        // Exit the php before it returns an succes state
                        exit();
                    };
                };
                // Now reset task_user
                $data['task_user'] = '';
            } else {
                // Return an error
                echo json_encode(array(
                    'status'=>'unsuccesful',
                    'where'=>2
                ));
                // Exit the php before it returns an succes state
                exit();
            };
        };
    } else {
        // Return an error
        echo json_encode(array(
            'status'=>'unsuccesful',
            'where'=>1
        ));
        // Exit the php before it returns an succes state
        exit();
    };
};
  • 写回答

2条回答 默认 最新

  • drh78568 2017-08-15 22:56
    关注

    You are using the $i variable in both for loops. This overwrites the $i in the first loop.

    for ($i = 0; $i < $yourVar1; i++){
    //some code    
        for ($a =0; $a < $yourVar2; a++){
        //some code
        }
    //some code
    }
    

    I just changed the $i in the inner loop to a $a so that it won't override it anymore. Hope that helps you

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥25 C语言代码,大家帮帮我
  • ¥15 请问以下文字内容及对应编码是用了什么加密算法或压缩算法呢?
  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿