Как оптимизировать операторы if else

 foreach ($remote_user_detail as $value){
        $user = User::where('unique_id',$value->userid)->first();

        if (count($user) > 0){
            $user->unique_id = $value->userid;
            $user->user_first_name = $value->name;
            $user->card_id = $value->cardnumber;
            $user->save();
        }else{
            $user = new User();
            $user->company_id = Auth::user()->company_id;
            $user->user_label = 2;
            $user->unique_id = $value->userid;
            $user->user_first_name = ($value->name=='') ? '' : $value->name ;
            $user->card_id = $value->cardnumber;
       $user->save();
}
}

теперь, как мне оптимизировать это, если еще, потому что уникальный идентификатор user_first_name и номер карты совпадают

Как насчет того, чтобы просто вставить другой бит в if () ... else..., а не весь код?

Nigel Ren 19.06.2018 08:00

как вы можете уточнить

Rahul 19.06.2018 08:01

но если name имеет значение null, тогда он должен принимать user_first_name как null, а если есть какое-либо имя, то вместо этого он должен принимать это имя.

Rahul 19.06.2018 08:02

Итак, как указано в одном из ответов, вы также можете просто назначить значение имени без if вообще.

Nigel Ren 19.06.2018 08:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
66
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Как указал Халид, вам не нужно проверять, поскольку вы уже назначаете пустое значение, поэтому это пустая трата. Это решение предназначено только в том случае, если вы хотите добавить что-нибудь еще.

Просто используйте Ternary opertor для $ user-> user_first_name, например

            $user = new User();
            $user->company_id = Auth::user()->company_id;
            $user->user_label = 2;
            $user->unique_id = $value->userid;
            $user->user_first_name = ($value->name=='') ? '' : $value->name ;
            $user->card_id = $value->cardnumber;
            $user->save();

Может быть так?

$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->card_id = $value->cardnumber;
if ($value->name=='') {
    $user->user_first_name = '';
}else {
    $user->user_first_name = $value->name;
}
$user->save();

Согласно вашей проверке if нет необходимости в проверке if, потому что, если $value->name == '', вы сохраняете пустую строку в $user->user_first_name = '', поэтому вы можете удалить проверку if

$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();

Отредактируйте обновленную базу кода, вы можете реорганизовать свой код как

foreach ($remote_user_detail as $value){
    $user = User::where('unique_id',$value->userid)->first();
    if (count($user) == 0){
        $user = new User();
        $user->company_id = Auth::user()->company_id;
        $user->user_label = 2;
        $user->unique_id = $value->userid;
    }
    $user->user_first_name = $value->name;
    $user->card_id = $value->cardnumber;
    $user->save();
}

но в моей таблице user_first_name 'NOT NULL', поэтому должно быть указано какое-то значение

Rahul 19.06.2018 08:08

@Rahul, если вам нужно указать какое-то значение, вам понадобится оператор if. Также каково ваше значение по умолчанию для user_first_name?

M Khalid Junaid 19.06.2018 08:09

Я рекомендую вам создать конструктор User и просто передать пользователя в качестве параметра 1 и $ value в качестве параметра 2.

class User {
    //definitions here
    function __construct2($user,$value) 
    { 
        company_id = $user->company_id;
        user_label = 2;
        unique_id = $value->userid;
        user_first_name = $value->name;
        card_id = $value->cardnumber;
    }
}

Это сильно очищает код для будущего использования, если вы хотите перераспределить что-то вроде этого.

$user = new User(Auth::user(), $value);

Кроме того, как показано - нет необходимости в инструкции if.

Насколько я понимаю, в состоянии 2 $user->user_first_name всегда равен $value->name. Увидеть себя if ($value->name=='') {$user->user_first_name = ''} Так что просто напишите свой код без «if else».

$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();

Кроме того, один совет для функции, если у вас есть, если у вас есть еще одна ситуация, используйте оператор объединения PHP 7 Null, вот ссылка и пример

http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
Ответ принят как подходящий

В операторе if я бы поместил только те вещи, которые меняются в соответствии с условием if. Там можно применить принцип СУХОЙ.

Для получения более подробной информации перейдите по этой ссылке http://web-techno.net/dry-principle-explained/

В вашем случае я выберу тернарный оператор:

Если это для вас в новинку, проверьте этот https://davidwalsh.name/php-shorthand-if-else-ternary-operators

$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name == '' ? '' : $value->name
$user->card_id = $value->cardnumber;
$user->save();
 foreach ($remote_user_detail as $value){
            $user = User::where('unique_id',$value->userid)->first();

            if (count($user) > 0){
                $user->unique_id = $value->userid;
                $user->user_first_name = $value->name;
                $user->card_id = $value->cardnumber;
                $user->save();
            }else{
                $user = new User();
                $user->company_id = Auth::user()->company_id;
                $user->user_label = 2;
                $user->unique_id = $value->userid;
                $user->user_first_name = ($value->name=='') ? '' : $value->name ;
                $user->card_id = $value->cardnumber;
           $user->save();
}
}

теперь, как мне оптимизировать это, если еще, потому что уникальный идентификатор user_first_name и cardnumber одинаковы

Я думаю, вам следует обновить свое сообщение или задать новый вопрос, включая обновленный код, не публикуйте это как ответ

M Khalid Junaid 19.06.2018 08:40

@junaid, я обновил свой вопрос, вы можете мне помочь.

Rahul 19.06.2018 08:50

Другие вопросы по теме