PHP boş ise birden fazla var test için?

7 Cevap

How can i test a var if its empty or not? i have this array

array($myname,$myhouse,$mywife);

Nasıl her biri kontrol edebilirsiniz eğer boş veya değil without using a loop?

7 Cevap

Ne soruyorsun imkansız veya mizahi belirtilebilir. Açıkça değişkenlerin dinamik bir koleksiyon sınamak için bir döngü adıyla her değişken sınamak veya kullanmanız gerekir ya.

(Tabii fonksiyonu hariç) bir satır:

function not_empty($val) {
    return !empty($val);
}

$result = array_product(array_map('not_empty',$array));

The result is 0 if one variable is empty otherwise 1.
But of course it won't tell which one is empty. ;)

Bkz array_map, array_product.

Eğer bir döngü yazmadan demek, o zaman kullanabilirsiniz:

in_array(true, array_map(create_function('$x', 'return empty($x);'),$array));

Örtülü iki kez aslında, dizi boyunca ders döngü olacak! Boşluk kontrol için bir kez, sonra tekrar sonucu kontrol etmek. Eğer bir non_empty değer vurduğunuzda size zarar verebilir bir döngü ile daha iyi konum.

$myvars = array($myname, $myhouse, $mywife);
foreach ($myvars as $value) {
  if (empty($value)) {
    // value is empty
  }
}

edit: İşte bir döngü kullanabilirsiniz olmayan bir versiyonu:

$myvars = array($myname, $myhouse, $mywife);
$myvars_filtered = array_filter($myvars, "empty"); // or isset, if you prefer
if (count($myvars_filtered) > 0) {
  // one or more values were empty
}

Felix yorumladı yerine yok olanlar, "isset" yerine "empty", bir değere sahip tüm değerleri alacak kullandığınızda, unutmayın. Yani bu durumda $myvars_filtered öğelerin saymak için $myvars öğelerin miktarını karşılaştırmak gerekir.

Try isset()

Edit- Use the code posted above, but change the function:

$myvars = array($myname, $myhouse, $mywife);
foreach ($myvars as $value) {
 if (isset($value)) {
  // Not set
 }
}

According to this, isset is marginally faster.

Bir döngü kullanmak değildir Başka bir çözüm:

<?php
$my_house = "";
$my_name = "Foo Bar";
$my_wife = "Angelina";

$arr = array($my_house, $my_name, $my_wife);
preg_replace("/.+/","-",$arr,-1,$count);
if ($count == 3) {
  # everything is filled
} else {
  # missing somehwere
}
?>

Tabii bunu yapmak için yolu vardır. Bunlardan biri:

<?php
$array = array('myname' => 'Jakob', 'myhouse' => '', 'mywife' => 1);

$empty_elements = array("");
$array = array_keys(array_intersect($array,$empty_elements));

var_dump($array);
?>

çıkışlar:

array 0 => string 'myhouse'

(Boş olanları çıkarmadan) bir benzer sorun için bazı diğer olasılıklar: http://hasin.wordpress.com/2009/09/16/removing-empty-elements-from-an-array-the-php-way/