операторы if else не работают, когда я добавляю оператор else. php

#php

#php

Вопрос:

У меня есть оператор if с еще 2 операторами if else под ним. Однако, когда я добавляю оператор else в конце всего этого, строки if else больше не работают.

может кто-нибудь, пожалуйста, сказать мне, что я делаю не так? Пожалуйста, и спасибо.

Приведенный ниже код работает нормально, потому что оператор else не добавляется.

 if(strtoupper($userData->firstName) == strtoupper($input)) {
            $firstUser = Subscriber::where('firstName', $input)->get();
            array_push($fillter, $firstUser);
            // return $fillter;
            return view('pages/results', compact('fillter'));
            
            } else if(strtoupper($userData->lastName) == strtoupper($input)) {
                    $lastUser = Subscriber::where('lastName', $input)->get();
                    array_push($fillter, $lastUser);
                    // return $fillter;
                    return view('pages/results', compact('fillter'));
                
                    } else if(strtoupper($userData->address) == strtoupper($input)) {
                        $addressUser = Subscriber::where('address', $input)->get();
                        array_push($fillter, $addressUser);
                        // return $fillter;
                        return view('pages/results', compact('fillter'));
                        
                        } 
  

Приведенный ниже код не работает, потому что я добавил оператор else .

 if(strtoupper($userData->firstName) == strtoupper($input)) {
            $firstUser = Subscriber::where('firstName', $input)->get();
            array_push($fillter, $firstUser);
            // return $fillter;
            return view('pages/results', compact('fillter'));
            
            } else if(strtoupper($userData->lastName) == strtoupper($input)) {
                    $lastUser = Subscriber::where('lastName', $input)->get();
                    array_push($fillter, $lastUser);
                    // return $fillter;
                    return view('pages/results', compact('fillter'));
                
                    } else if(strtoupper($userData->address) == strtoupper($input)) {
                        $addressUser = Subscriber::where('address', $input)->get();
                        array_push($fillter, $addressUser);
                        // return $fillter;
                        return view('pages/results', compact('fillter'));
                        
                        } else { 
                               return view('pages/empty');
                        }
  

Комментарии:

1. view() Ожидает ли функция 2 аргумента / параметра? … Если это так, вы передаете только 1 в else.

2. Я должен уточнить, когда я добавляю оператор else, он, похоже, игнорирует операторы if else и просто запускает оператор else внизу. Поэтому, когда я запрашиваю что-то действительное, это просто приводит меня к представлению в этом операторе else.

3. Таким образом, это означает, что ни одно из других предыдущих условий не было выполнено, чтобы быть истинным, поэтому выигрывает else. Мы не знаем обработку до первой if , поэтому вам может потребоваться выполнить echo/print /print_r/var_dump некоторые значения до этой точки, чтобы увидеть, что $userData $input содержат значения and .

4. когда я var_dump $userData, я получаю эти объекты, а когда я var_dump $input, я получаю строки. Однако, когда я dd $input , он просто возвращает одну строку. Это мой код для этих переменных $user = DB::table(‘подписчики’)-> get(); $input = $request->input(‘запрос’);

5. Итак, чему равно одно строковое значение $input ?

Ответ №1:

Else может сократить любые другие совпадения из-за возврата в блоке else.

Например, если вы ищете jane, а этого нигде нет, первая $userData запись перейдет к else: нет firstName совпадения, нет lastName совпадения, нет address совпадения, поэтому else возвращает представление без результатов (что также завершает foreach ) и не продолжает поиск других $userData записей.

Этот пример должен работать так, как ожидалось:

 function search($request) {
    $user = DB::table('subscribers')->get();
    $input = $request->input('query');
    $fillter = [];
    
    foreach ($user as $userData) {
    
        if (strtoupper($userData->firstName) == strtoupper($input)) {
            $firstUser = Subscriber::where('firstName', $input)->get();
            array_push($fillter, $firstUser);
    
        } else if (strtoupper($userData->lastName) == strtoupper($input)) {
            $lastUser = Subscriber::where('lastName', $input)->get();
            array_push($fillter, $lastUser);
    
        } else if (strtoupper($userData->address) == strtoupper($input)) {
            $addressUser = Subscriber::where('address', $input)->get();
            array_push($fillter, $addressUser);
    
        }
    }
    
    if (!empty($fillter)) {
        return view('pages/results', compact('fillter'));
    } else {
        return view('pages/empty', compact('fillter'));
    }
}