处理内容可能包含或不包含另一个数组的php数组


Dealing with php array whose content may or may not have another array

我正在处理的数组,其结构取决于数组中的数字或项目而不同。

例如,下面的数组中只有一个元素:

// Case #1
["Assignment"]=>
object(stdClass)#29 (9) {
  ["Id"]=> string(10) "1234567890"
  ..
}

但是如果数组中有多于1个元素,

// Case #2
["Assignment"]=>
  array(2) {
    [0]=>
    object(stdClass)#28 (9) {
      ["Id"]=> string(10) "1234567890"
      ..
    }
    [1]=>
    object(stdClass)#28 (9) {
      ["Id"]=> string(10) "1234567890"
      ..
    }
  }

注意,this的内容在另一个数组中。不管有多少项,我都想访问Id$array->Id可以在一种情况下工作,但不能在另一种情况下工作,错误提示:Trying to get property of non-object

我可以想出一个低效率的方法,通过计算数组中内容的#,像这样:
// say the arrays above are declared as $assignment
if($numOfAssignment > 1) {
  foreach($assignment as $key) {
    echo $key->Id;
  }
}
else { 
  echo $assignment->Id;
}

但是如果代码有点长,我觉得它太重复和低效了。有没有一种方法可以在一个有效的短语中做到这一点,而不管数组内的内容的数量?如果有什么不清楚的,请告诉我。谢谢!

你能做的就是把非数组变成一个只有一个元素的数组,然后你就可以一致地处理它了。

if (!is_array($assignment)) {
    $assignment = array($assignment);
}
foreach ($assignment as $key) {
    echo $key=>Id;
}