PHP foreach для массива объектов И одного объекта? - PullRequest
5 голосов
/ 02 марта 2011

У меня довольно большой php-скрипт, который довольно часто использует цикл foreach.Теперь он работает так: я передаю массив объектов в каждый цикл foreach, но я хочу изменить сценарий, чтобы он работал только с объектом.Я действительно ненавижу и не думаю, что разумно проверять перед каждым циклом, является ли он массивом объектов или просто отдельным объектом, и в зависимости от ситуации циклически перемещаться по массиву или просто делать что-то с одним объектом.Любой обходной путь это?Заранее спасибо

Ответы [ 3 ]

16 голосов
/ 02 марта 2011
$item = $obj;
// or
$item = array( ... );

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

foreach($item as $individual)
{
   //...
}
1 голос
/ 02 марта 2011

Вы можете передать массив с одним объектом внутри него. Или используйте полиморфный конструктор / функцию настройки.

Передача массива с одним объектом довольно очевидна, как это сделать, вот несколько других возможных способов борьбы с ним:

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);
    }
}
0 голосов
/ 02 марта 2011

Звучит так, будто вам нужно написать функцию / Это послужит вашим целям?

if(is_array($thingy)){
    foreach($thingy as $thing){
        function($thing);
    }
}else{
    function($thingy);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...