php foreach 中的上下文是如何工作的?
How context works inside php foreach?
我正在编写一个简单的选项卡导航,但我遇到了这个问题:
函数 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')
。
编辑:
我在print_office
里面放了一个var_dump($office)
。
当在 之外 foreach
调用时,我得到:
object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
当在 中调用 foreach
时,我得到:
FOREACH:object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
所以唯一的区别是:FOREACH:object
而不是 object
。
看起来 $loop->posts
是一个关联数组(如 JS 对象),或者 $loop->posts
扩展了 Traversable
接口而不是 ArrayAccess
接口。
示例关联数组
如果您的数组如下所示:
<?php
$loop->posts = array(
'key1' => 'Post message 1',
'key2' => 'Post message 2'
);
?>
您无法通过 $loop->posts[0]
访问 "Post message 1"。但是你可以通过 $loop->posts['key1']
可移动/ArrayAccess
Traversable and ArrayAccess on php.net有很好的解释
问题在于,当它不起作用时,没有 $post 变量,而 get_field('field_name') returns 字段当前 post,实际上是 $post
我正在编写一个简单的选项卡导航,但我遇到了这个问题:
函数 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')
。
编辑:
我在print_office
里面放了一个var_dump($office)
。
当在 之外 foreach
调用时,我得到:
object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
当在 中调用 foreach
时,我得到:
FOREACH:object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
所以唯一的区别是:FOREACH:object
而不是 object
。
看起来 $loop->posts
是一个关联数组(如 JS 对象),或者 $loop->posts
扩展了 Traversable
接口而不是 ArrayAccess
接口。
示例关联数组
如果您的数组如下所示:
<?php
$loop->posts = array(
'key1' => 'Post message 1',
'key2' => 'Post message 2'
);
?>
您无法通过 $loop->posts[0]
访问 "Post message 1"。但是你可以通过 $loop->posts['key1']
可移动/ArrayAccess
Traversable and ArrayAccess on php.net有很好的解释
问题在于,当它不起作用时,没有 $post 变量,而 get_field('field_name') returns 字段当前 post,实际上是 $post