PHP dizi arıyor soru

5 Cevap php

Ben diziler var, bazıları da çok boyutludur. Ben tüm değerleri null olup olmadığını bilmek için bir yol gerekir. Ne bir dizi (yanı sıra bu dizinin içindeki dizilerin değerleri) TÜM değerleri null ise belirleyen en verimli ve etkili yolu olurdu?

Yani temelde: tüm değerleri null ise arama array, $ bayrak = true

Bir fark yaparsa EDIT: değerleri, NULL MySQL bağlamında bir MySQL veritabanı çekiliyor.

5 Cevap

: Ben böyle bir işlevi kullanabilirsiniz çok iyi db boş alanları php boş dizeler haline hatırlarsanız

function isEmptyArray($array){
   foreach($array as $val)
      if((is_array($val) && !isEmptyArray($val))||(!is_array($val) && $val!="")) return false;
   return true;
}

Sizin için bu bayrağı kullanmak ne bağlıdır, ama ben gibi, sadece sigara null değerleri alır böylece en iyi veritabanını sorgulamak için olacağını düşünüyorum

select col1,col2,col3 from table where col1 is not null and col2 is not null 
and col3 is not null

O dedi, PHP böyle bir şey yapmak için basit bir yol olacaktır

//array_filter filters values that evaulate to fals
$result = array_filter($input); 
if (count($result) == 0) { $flag = true; }

Bu will fail çokboyutlu ve otomatik yanlış dönüştürülür sıfır ya da başka değerler dizideki geçerli değerler ise bu durumda eğer, tekrarlamalı bir geri çağırma işlevi oluşturmak ve ikinci bir parametre olarak geçmek zorunda için array_filter.

Varsayılan olarak false eşit değerleri (bu NULL dahil) şeritler, array_filter() fonksiyonuna bakmak isteyebilirsiniz.

Ben çok-boyutlu diziler için olduğu gibi çalırsan emin değilim, ama kolayca bu işlemek için izin verecek işlevleri geri çağırmak kullanma seçeneği vardır.

Uzun lafın kısası, dizide array_filter çalıştırın ve boş bir dizi tüm değerler null veya false eşit sonra geri almak - Eğer sıkı bir anlamda bu değerler arasındaki ayrım gerekiyorsa, o zaman geri çağrı kullanmak gerekir.

Recursively yapılabilir:

arrayIsFullyNull ($arr)
{
   if (is_array($arr))
      foreach ($arr as $val)
         if (!arrayIsFullyNull($val))
            return false;
   else if (!is_null($arr))
       return false;
   else
      return false; // it's not null, and not array => value

   return true; 
}

Tüm değerleri (iç içe diziler arasında ağacının yaprakları) üzerinde yürümek bir RecursiveArrayIterator kullanabilirsiniz.

Denenmemiş kodu:

function isNullOrNestedArrayOfNulls($array)
{
  if (is_null($array)
  {
    return true;
  }
  else if (!is_array($array))
  {
    return false;
  }

  $allNull = true;
  $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($array),
                                        RecursiveIteratorIterator::LEAVES_ONLY);

  while ($iter->valid())
  {
    if (!is_null($iter->current())
    {
      $allNull = false;
      break;
    }
  }

  return $allNull;
}

Bu tekrarlanan bir işlev (PHP oldukça verimsiz olma üne sahip olan) kaçınmak avantajına sahip olacaktır.