我有一个数组,它将有3种情况,如下所示:
第一:
array: [
"QtyIn" => "0"
"QtyOut" => "0"
]
第二:
array: [
"QtyIn" => "0"
]
第三:
array: [
"QtyOut" => "0"
]
现在我想检查QtyIn=0,返回A.QtyOut=0,返回B.如果QtyIn和QtyOut=0,返回C
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
}
}
有没有办法写得更干净一些?
谢谢!
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
}
}
如果您要做的第一件事是将值存储在临时变量中,并在未设置值的情况下应用??
将值设置为某个非零值,那么测试会变得更短。。。
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。
Cleaner并不意味着更短。例如,如果你想更干净,可以这样做:
$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;
}