在对象数组和单个对象上使用PHP foreach循环?

5

我有一个相当大的PHP脚本,经常使用foreach循环。现在的工作方式是我将对象数组传递给每个foreach循环,但我想修改脚本,使其也能处理单个对象。我真的不希望并且认为在每个循环之前检查它是对象数组还是单个对象,并根据情况循环遍历数组或仅对单个对象进行操作是不合理的。

有没有解决办法?

谢谢提前!


我认为,如果在脚本的多个点上,您不确定自己是在处理单个对象还是对象数组,则说明您没有正确定义数据流。 - deceze
3个回答

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

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

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

在PHP中,我发现这是一个非常常见的模式。 - user229044

1
您可以传递一个只有一个对象的数组,或者使用多态构造函数/函数设置。
传递一个只有一个对象的数组非常明显如何实现,以下是其他可能处理它的方式:
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

听起来你需要编写一个函数/这个能满足你的需求吗?

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

那就是我想要避免的,如果有至少几十个foreach循环和添加操作。我不想把每个foreach循环的内容都包装在函数中。无论如何,还是谢谢。 - pHelics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接