やりたいことと、プログラムが一致していませんので想像で回答します。
仕様を見直したほうが良いと思いますが、仕様を変更できないのであれば下記はいかがでしょうか。
プログラムどおり
if((isset($req['foo']) && !empty($req['foo'])) && (isset($req['bar']) && empty($req['bar'])) )
if((isset($req['foo']) && empty($req['foo'])) && (isset($req['bar']) && !empty($req['bar'])) )
■ ロジック
$req['foo']
、$req['bar']
の連想配列キーが存在している
$req['foo']
、$req['bar']
どちらか一方のみがempty() == false
である
php
1if (array_key_exists('foo', $req) && array_key_exists('bar', $req)) {
2 if (!empty($req['foo']) xor !empty($req['bar'])) {
3 var_dump('');
4 }
5}
やりたいことどおり
1つ目の項目fooが空またはnullの場合、2つ目の項目barに値があった場合(0,空含む)
2つ目の項目barが空またはnullの場合、1つ目の項目fooに値があった場合(0,空含む)
■ ロジック
$req['foo']
、$req['bar']
の連想配列キーが存在している
$req['foo']
または、$req['bar']
が0,空文字
を含むempty() == false
である
php
1$_req = array_filter($req, function($value, $key) {
2 if ($key == 'foo' || $key == 'bar') {
3 return !empty($value) || $value == "0" || $value === "";
4 }
5 return true;
6}, ARRAY_FILTER_USE_BOTH));
7
8// foo, bar両方とも条件(empty() == false,0,空文字)を満たすものを除外
9if (array_key_exists('foo', $_req) xor array_key_exists('bar', $_req)) {
10 var_dump('');
11}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。