php foreach中的上下文如何工作?

时间:2016-07-29 15:18:59

标签: php wordpress foreach advanced-custom-fields

我正在编写一个简单的标签导航,我正面临这个问题:

函数print_office仅在我在foreach内部时才有效。

//Doesn't work
print_office($loop->posts[0], true);

//Works
foreach ($loop->posts as $index => $post) {
    print_office($post, true);
}

print_office功能使用高级自定义字段' get_field('field_name')

编辑:

我已将var_dump($office)放入print_office

外面时调用foreach我得到:

object(WP_Post)#317 (24) {
  ["ID"]=> int(7)
  ["post_author"]=> string(1) "1"

  [.....] //More fields;
}

当在内部中调用<{1}}时,我得到:

foreach

唯一的区别是:FOREACH:object(WP_Post)#317 (24) { ["ID"]=> int(7) ["post_author"]=> string(1) "1" [.....] //More fields; } 而非FOREACH:object

2 个答案:

答案 0 :(得分:2)

问题在于,当它不起作用时,没有$ post变量,get_field(&#39; field_name&#39;)返回当前帖子的字段,这实际上是$交

答案 1 :(得分:0)

看起来$loop->posts是一个关联数组(如JS对象)或$loop->posts扩展Traversable接口但不扩展ArrayAccess接口。

示例关联数组

如果你的数组看起来像这样:

<?php
     $loop->posts = array(
         'key1' => 'Post message 1',
         'key2' => 'Post message 2'
     );
?>

您无法通过$loop->posts[0]访问“发布消息1”。但您可以通过$loop->posts['key1']

Travesable / ArrayAccess

Traversable

上的ArrayAccessphp.net有一个很好的解释