2011-03-02 4 views
6

Oldukça büyük bir foreach döngüsünü kullanan oldukça büyük bir php betiğim var. Şu anda çalıştığı yol, her foreach döngüsüne bir dizi nesne iletmekteyim, ancak betiği yalnızca bir nesne ile çalışmak üzere değiştirmek istiyorum. Gerçekten çok nefret ediyorum ve bir dizi nesne ya da sadece tek bir nesne ise ve her bir döngüden önce kontrol edilmesinin mantıklı olduğunu düşünmüyorum. Herhangi bir geçici çözüm bu mu? Eğer bu amaçlara hizmet ederim/bir işlevi yazmak gerekiyor gibiPHP nesnelerin dizisini ve tek bir nesneyi foreach?

+0

söyleyebilirim Tek bir nesne üzerinde çalışıp çalışmadığınızı veya bir dizi nesnenin veri akışınızı doğru bir şekilde tanımladığınızdan emin olun. – deceze

cevap

16
$item = $obj; 
// or 
$item = array(...); 

if(!is_array($item)) 
    $item = array($item); 

foreach($item as $individual) 
{ 
    //... 
} 
+0

PHP'de son derece yaygın olan model, – meagar

0

Sesler peşin Teşekkür?

if(is_array($thingy)){ 
    foreach($thingy as $thing){ 
     function($thing); 
    } 
}else{ 
    function($thingy); 
} 
+0

'u buluyorum. En azından birkaç düzine foreach döngüsüne ve eklemeye sahip olmaktan kaçınmaya çalıştığım şey buydu. Her foreach döngü içeriğini bir işlevde sarmaktan nefret ediyorum. Yine de teşekkürler. – pHelics

1

İçinde tek bir nesneyle bir dizi geçirebilirsiniz. Veya bir polimorfik kurucu/işlev kurulumu kullanın. Tek bir nesne ile bir dizi Geçme

bunu nasıl oldukça açıktır, burada onunla başa çıkmak için bazı diğer olası yöntemler anlatılmaktadır: Senaryonuzun birçok noktada Eğer değilsen

function test($var) 
{ 
    if(is_a($var,"ClassName")) //Test to see if the passed variable is a member of the class and not an array and put it in an array if so 
    { 
      $var = array($var); 
    } 

    foreach($var as $v) 
    { 
      //Do stuff 
    } 
} 

function test($var) 
{ 
    if(is_array($var)) //Test if object is array or class, call different functions depending on which it is 
    { 
     call_user_func_array(array($this,'doArray'),$var); 
    } 
    elseif(is_a($var,"Classname")) 
    { 
     call_user_func_array(array($this,'doObject'),$var); 
    } 
}