0

选项1:

$foo = array($obj1, $obj2, $obj3);
for ($i = 0; $i < 1; $i++) {
    echo $foo[$i]->attribute;
    echo $foo[$i]->attribute2;
}
//shows obj1's attribute and attribute2

选项 2:

$foo = array($obj1, $obj2, $obj3);
$first_foo = array_shift($foo); /* now we only have the first index in the new array */
foreach ($first_foo as $object) {
    echo $object->attribute;
    echo $object->attribute2;
}
//shows obj1's attribute and attribute2

选项 3:

$foo = array($obj1, $obj2, $obj3);
$first_foo = $foo[0] /* now we just have an object, obj1 */
echo $first_foo->attribute;
echo $first_foo->attribute2;
//shows obj1's attribute and attribute2

我使用了选项 3,但所有这些都感觉有点缺乏......你会怎么做?如果您想轻松拉出前两个而不是稍后拉出一个,那么选项 1 和 2 中的循环是否值得?即拉最新的新闻文章与拉最新的两个等。

4

4 回答 4

2

为什么这么复杂?

Loops, array_shift(), ... 这一切都不是必需的。

您自己给出了解决方案:

$foo[0]->attribute

另一个是

reset($foo)->attribute

在您的编辑中:

如果您想编写代码以便以后灵活,请执行

$need = 1; // the variable number of elements you need
for($i = 0; $i < $need; $i++)
    echo $foo[$i]->attribute;
于 2013-05-10T08:39:15.613 回答
1

在这种情况下,不需要两次迭代。我会用更少的代码来选择你的选项#3。

$foo = array($obj1, $obj2, $obj3);
echo $foo[0]->attribute;
echo $foo[0]->attribute2;
于 2013-05-10T08:37:47.040 回答
1

假设:

$b = [0,1];
$c = [2,3];

让:

$a = [$b,$c];

$first_elem = array_shift($a);

print_r($first_elem);
于 2013-05-10T08:38:50.227 回答
0

这是为了从 array_shift 中获取超过 1,它在数组为空后返回 null

$foo = array($obj1, $obj2, $obj3);
while($obj = array_shift($foo))
   echo $obj->attribute;

您的选项 2 可以更改为

$foo = array($obj1, $obj2, $obj3);
foreach ($foo as $object) {
    echo $object->attribute;
    echo $object->attribute2;
}

为什么不使用它呢?

于 2013-05-10T08:38:42.653 回答