Проверить существование элемента в массиве и возвращает, если условие на PHP
У меня есть массив, который будет иметь 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

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
}
}

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;
}

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.