Geçersiz bağımsız değişken) (foreach için verilen

3 Cevap coding-style

Genellikle bir dizi veya boş değişkeni olabilir ve bu veriler ile bazı foreach beslemek için verileri işlemek için bana olur.

$values = get_values();

foreach ($values as $value){
  ...
}

Bir dizi olmayan verilerle bir foreach beslemek zaman, bir uyarı olsun:

Warning: Invalid argument supplied for foreach() in [...]

Her zaman, ben bu uyarıları önlemek için temiz ve en etkili yoludur hangi merak ediyorum bir dizi (diğer sebebi ne olursa olsun geriye dönük uyumluluk, mevcut değil kaynak kodu) dönmek için get_values() fonksiyonunu refactor mümkün değil varsayarsak :

  • Diziye $ değerleri Döküm
  • Diziye $ değerleri başlatılıyor
  • Bir if ile foreach sarma
  • Diğer (önermek lütfen)

3 Cevap

Bu en verimli, akıl eğer emin - Şahsen ben bu en temiz olarak görüyorum!

if (is_array($values))
{
    foreach ($values as $value)
    {
        ...
    }
}

Yine de başlamak için hiçbir şey var zaman boş bir dizi tahsis değil bu yüzden benim tercih için nedenidir.

Ben genellikle buna benzer bir yapı kullanabilirsiniz:

/**
 * Determine if a variable is iterable. i.e. can be used to loop over.
 *
 * @return bool
 */
function is_iterable($var)
{
    return $var !== null 
        && (is_array($var) 
            || $var instanceof Traversable 
            || $var instanceof Iterator 
            || $var instanceof IteratorAggregate
            );
}

$values = get_values();

if (is_iterable($values))
{
    foreach ($values as $value)
    {
        // do stuff...
    }
}

Bu özel sürüm test unutmayın, onun bellek SO doğrudan yazdınız.

Edit: ilave Traversable onay

i Andy gibi aynı şeyi yapardı ama I'ld 'boş' işlevini kullanın.

şöyle:

if(empty($yourArray))
{echo"<p>There's nothing in the array.....</p>";}
else
{
foreach ($yourArray as $current_array_item)
  {
    //do something with the current array item here
  } 
}