Проверить существование элемента в массиве и возвращает, если условие на PHP


Проверить существование элемента в массиве и возвращает, если условие на PHP

02.11.2020 09:54:09 Просмотров 6 Источник

У меня есть массив, который будет иметь 3 таких случая:

Первый:

array: [
  "QtyIn" => "0"
  "QtyOut" => "0"
]

Второй:

array: [
  "QtyIn" => "0"
]

Третий:

array: [
  "QtyOut" => "0"
]

Теперь я хочу проверить, если QtyIn = 0, return A. QtyOut = 0, return B. И если QtyIn и QtyOut = 0, верните C. я попробовал с 3 операторами if, подобными этому:

if ( isset($data['QtyIn']) && isset($data['QtyOut']) ) {
    if ( $data['QtyIn'] <= 0 && $data['QtyOut'] <= 0 ) {
        return A
    }
} 

if ( isset($data['QtyIn']) ) {
    if ( $data['QtyIn'] <= 0 ) {
        return B
    }
}

if ( isset($data['QtyOut']) ) {
    if ( $data['QtyOut'] <= 0 ) {
        return C
    }
}

Есть ли вообще возможность написать этот код более чистым?

Спасибо!

У вопроса есть решение - Посмотреть?

Ответы - Проверить существование элемента в массиве и возвращает, если условие на PHP / Check element exist in array and return in if condition PHP

Burhan Kashour

02.11.2020 10:19:56

if ( isset($data['QtyIn']) && isset($data['QtyOut']) ) {
    if ( $data['QtyIn'] == 0 && $data['QtyOut'] == 0 ) {
        return A;
    }else if ( $data['QtyIn'] == 0 ) {
        return B;
    }else if ( $data['QtyOut'] == 0 ) {
        return C
    }
} 
ChernovGV

02.11.2020 10:25:44

Чище-не значит короче. Если вы хотите быть чище, например, таким образом:

$qtyIn = $data['QtyIn'] ?? null;
$qtyOut = $data['QtyOut'] ?? null;

if (isZeroOrLess($qtyIn) && isZeroOrLess($qtyOut)) {
    return A;
}

if (isZeroOrLess($qtyIn)) {
    return B;
}

if (isZeroOrLess($qtyOut)) {
    return C;
}

function isZeroOrLess($val = null)
{
    if ($val === null) {
        return false;
    }
    return $val <= 0;
}
Nigel Ren

02.11.2020 10:31:43

Если первое, что вы делаете, это сохраняете значения во временной переменной и применяете ??, чтобы установить значение на некоторое ненулевое значение, если они не установлены, то тесты становятся короче...

function check($data)   {
    $in = $data['QtyIn'] ?? -1;
    $out = $data['QtyOut'] ?? -1;
    if ( $in == 0 && $out == 0 ) {
        return 'A';
    }
    if ( $in == 0 ) {
        return 'B';
    }
    
    if ( $out == 0 ) {
        return 'C';
    }
}
echo check(['QtyIn' => 0, 'QtyOut' => 0]);
echo check(['QtyIn' => 0]);
echo check(['QtyOut' => 0]);

Вы можете сократить его, используя тернарные выражения, но это не так читабельно (IMHO)...

function check($data)   {
    $in = $data['QtyIn'] ?? -1;
    $out = $data['QtyOut'] ?? -1;
    return ( $in == 0 && $out == 0 ) ? 'A' : 
        (( $in == 0 ) ? 'B' : 
                (( $out == 0 ) ? 'C' : ''));

}

Этот код также использует == вместо <= 0, как указал @Jeto в своем комментарии, Вы утверждаете, что он должен быть = 0.

Помочь в развитии проекта:
Закрыть X