PHParray遍历

时间:2017-04-11 17:43:40

标签: php wordpress

在Wordpress中,有一个函数wp_get_sidebars_widgets(),它会将所有已注册的侧边栏ID的多维数组及其子级激活的小部件ID进行扫描。

对于上下文,这是一个示例输出:

Array
(
[wp_inactive_widgets] => Array
    (
    )

[sidebar-requests] => Array
    (
        [0] => widget-demographics-4
        [1] => recent-posts-7
        [2] => widget-newsletter-11
    )

[sidebar-team] => Array
    (
        [0] => widget-sidebar-list-6
        [1] => widget-donate-2
    )

)

我在窗口小部件中使用此代码来查找它所在的侧边栏的ID。例如,只能有一个' widgets-newsletter-11',它存在于& #39;侧边栏请求'小部件区域。

我无法存储此小部件区域的ID。这是我试图使用的代码的简单版本。

$this_widget_id = 'widget-newsletter-11';
$this_widget_area_id;

$all_widgets = wp_get_sidebars_widgets();

foreach ( $all_widgets as $widget_area => $widget_id ) {
    if ( $widget_id == $this_widget_id )
        $this_widget_area_id = $widget_area;
}

在此结束时,存储的变量$this_widget_area_id仍为空。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我认为您正在针对Id检查数组,您应该检查该特定数组是否包含Id:

foreach ( $all_widgets as $widget_area => $widget_items ) {
    if ( in_array($this_widget_id, $widget_items, true) )
        $this_widget_area_id = $widget_area;
}

希望我没有误解你的问题。

答案 1 :(得分:1)

您不想遍历外部数组。您只想循环侧边栏请求

$this_widget_id = 'widget-newsletter-11';
$this_widget_area_id;

$all_widgets = wp_get_sidebars_widgets();
 $all_widgets = $all_widgets[sidebar-requests];
foreach ( $all_widgets as $widget_area => $widget_id ) {
    if ( $widget_id == $this_widget_id )
    $this_widget_area_id = $widget_area;
 }

答案 2 :(得分:0)

感谢@eatpeanutbutter建议我添加另一个循环。我添加了

foreach ( $widget_ids as $widget_order => $widget_id ) {
    if ( $widget_id == $this_widget_id )
        $this_widget_area_id = $widget_area;
}

一切都按预期工作。谢谢!