18

PHPの関数を使用していくつかのコードを洗練しようとしていif(!empty)ますが、複数の変数が配列ではない場合にこれを複数の変数に適用する方法がわかりません (以前に行う必要があったように)。

$vFoo       = $item[1]; 
$vSomeValue = $item[2]; 
$vAnother   = $item[3];

次に、値がある場合にのみ結果を出力したいと思います。これは1つの変数に対して機能するため、次のようになります。

 if (!empty($vFoo)) {
     $result .= "<li>$vFoo</li>";
 }

私はの線に沿って何かを試しました

if(!empty($vFoo,$vSomeValue,$vAnother) {
    $result .= "<li>$vFoo</li>"
    $result .= "<li>$vSomeValue</li>"
    $result .= "<li>$vAnother</li>"
}

しかし、もちろん、うまくいきません。

4

15 に答える 15

38

複数の引数を受け入れ、それぞれをempty()に渡す新しいラッパー関数を作成できます。isset()と同様に機能し、すべての引数が空の場合にのみtrueを返し、最初の空でない引数に到達するとfalseを返します。これが私が思いついたもので、それは私のテストで機能しました。

function mempty()
{
    foreach(func_get_args() as $arg)
        if(empty($arg))
            continue;
        else
            return false;
    return true;
}

補足:「空」の先頭の「m」は「複数」を表します。あなたはそれを好きなように呼ぶことができます、しかしそれはそれに名前を付ける最も短い/最も簡単な方法のように思えました。その上...言うのは楽しいです。:)

10/10/13の更新: empty()やisset()とは異なり、このmempty()関数は、未定義の変数または存在しない配列インデックスを渡すと、血まみれの殺人を叫ぶことを追加する必要があります。

于 2011-10-17T19:57:36.287 に答える
7

ブール/論理演算子を使用:

if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
    $result .= "<li>$vFoo</li>"
    ...
}

orまた、これらをの代わりに で結合することもできますand。ご覧のとおり、これによりかなりの柔軟性が得られます。

于 2011-02-14T14:15:03.173 に答える
4

isset の代わりにこの関数を使用します。@imkingdavid のものより少し単純で、すべての引数 (変数) が空でない場合は true を返し、最初の空の値の後に false を返します。

function isNotEmpty() {
    foreach (func_get_args() as $val) {
        if (empty($val)) {
            return false;
        }
    }

    return true;
}
于 2016-06-01T15:58:29.320 に答える
3

入力の手間を省いて、ループに入れてください...

foreach (array('vFoo','vSomeValue','vAnother') as $varname) {
  if (!empty($$varname)) $result .= '<li>'.$$varname.'</li>';
}
于 2011-02-14T14:20:17.077 に答える
2

他の人が指摘したように、empty()引数は1つしか取らないので、次のようなものを使用する必要があります

if(!empty($v1) && !(empty($v2) ...)

if (!empty($v))は同じものなのでif($v)、次のものも使用できます。

if ($v1 && $v2 ...)
于 2011-02-14T14:22:40.727 に答える
1

$item 配列をループしない理由

foreach($item as $v) {
    if(!empty($v))) {
        $result .= "<li>$v</li>";
    }
}

キーインデックス値も検証できます

foreach($item as $key => $value) {
    if($key == 'vFoo') {
        if(!empty($value))) {
            $result .= "<li>$value</li>";
        }
    }
    // would add other keys to check here
}

empty() と isset() の比較

$zero = array(0, "0");

foreach($zero as $z) {
    echo "\nempty(): $z ";
    var_dump($z);
    var_dump(empty($z)); // Will return true as in it's empty
    echo "isset(): $z ";
    var_dump(isset($z)); // will return true as it has value
}

出力:

empty(): 0 int(0)
bool(true)
isset(): 0 bool(true)

empty(): 0 string(1) "0"
bool(true)
isset(): 0 bool(true)
于 2011-02-14T14:24:20.570 に答える
0

あなたがしようとしていることを 100% 理解しているとは言えませんが、考えられる答えをいくつか示します。

これは、空でない場合にのみ各変数を返します。

function printIfNotEmpty($var) {
  if (!empty($var)) {
    return '<li>' . $var . '</var>';
  }
  return '';
}
$result .= printIfNotEmpty($vFoo);
$result .= printIfNotEmpty($vSomeValue);
$result .= printIfNotEmpty($vAnother);

または、これらのいずれも空でない場合、これは 3 つすべてを追加します。

if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
  $result .= '<li>' . $vFoo . '</li>';
  $result .= '<li>' . $vSomeValue . '</li>';
  $result .= '<li>' . $vAnother . '</li>';
}
于 2011-02-14T14:20:10.090 に答える
0

皆さん、すべての回答に感謝します。考えられるすべての回答に基づいてスクリプトを作成しました。これは、ほとんどのエラーの背後にある原因である PHP の構文を実際に学習するのに役立ちます :)

$vNArray ['Brandon']  = $item[3]; 
$vNArray['Smith']= $item[4]; 
$vNArray ['Johnson']= $item[5];
$vNArray ['Murphy']= $item[6];
$vNArray ['Lepsky']= $item[7];

foreach ($vNArray as $key => $value){

    if(!empty($value)){
        $result  .= "\t\t\t\t<li><strong>$key</strong>"  .$value.   "</li>\n";
}

私は今、これらのいくつかを違うものにする方法を理解する必要があります. それでは、次の方法でそれぞれにアクセスできますか?

$result  .= "\t\t\t\t<li><strong>$key[0]</strong>"  .$value. "</li>\n";
$result  .= "\t\t\t\t<li><a href="thislink.com">$key[3]</a>"  .$value. "</li>\n";

みんなありがとう!

于 2011-02-15T11:53:44.153 に答える