从数组中检索,简单的php

时间:2014-02-11 22:21:54

标签: php arrays

我有这个:

print_r($response["member"]);

我需要在name下检索levels,它位于底部,我应该如何编写它: 我想到了$response["member"][0]["Sequential"]["levels"]...?此数字也不会总是相同。

谢谢!

Array
(
    [0] => Array
        (
            [ID] => 1
            [UserInfo] => Array
                (
                    [ID] => 1
                    [caps] => Array
                        (
                            [administrator] => 1
                        )

                    [cap_key] => wp_capabilities
                    [roles] => Array
                        (
                            [0] => administrator
                        )

                    [allcaps] => Array
                        (
                            [switch_themes] => 1
                            [edit_themes] => 1
                            [activate_plugins] => 1
                            [edit_plugins] => 1
                            [edit_users] => 1
                            [edit_files] => 1
                            [manage_options] => 1
                            [moderate_comments] => 1
                            [manage_categories] => 1
                            [manage_links] => 1
                            [upload_files] => 1
                            [import] => 1
                            [unfiltered_html] => 1
                            [edit_posts] => 1
                            [edit_others_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [edit_pages] => 1
                            [read] => 1
                            [level_10] => 1
                            [level_9] => 1
                            [level_8] => 1
                            [level_7] => 1
                            [level_6] => 1
                            [level_5] => 1
                            [level_4] => 1
                            [level_3] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [edit_others_pages] => 1
                            [edit_published_pages] => 1
                            [publish_pages] => 1
                            [delete_pages] => 1
                            [delete_others_pages] => 1
                            [delete_published_pages] => 1
                            [delete_posts] => 1
                            [delete_others_posts] => 1
                            [delete_published_posts] => 1
                            [delete_private_posts] => 1
                            [edit_private_posts] => 1
                            [read_private_posts] => 1
                            [delete_private_pages] => 1
                            [edit_private_pages] => 1
                            [read_private_pages] => 1
                            [delete_users] => 1
                            [create_users] => 1
                            [unfiltered_upload] => 1
                            [edit_dashboard] => 1
                            [update_plugins] => 1
                            [delete_plugins] => 1
                            [install_plugins] => 1
                            [update_themes] => 1
                            [install_themes] => 1
                            [update_core] => 1
                            [list_users] => 1
                            [remove_users] => 1
                            [add_users] => 1
                            [promote_users] => 1
                            [edit_theme_options] => 1
                            [delete_themes] => 1
                            [export] => 1
                            [administrator] => 1
                        )

                    [filter] => 
                    [user_login] => admin
                    [user_nicename] => admin
                    [user_email] => goranefbl@gmail.com
                    [user_url] => 
                    [user_registered] => 2014-01-29 10:57:09
                    [user_activation_key] => 
                    [user_status] => 0
                    [display_name] => admin
                    [wlm_feed_url] => http://pialarson.com/excel/feed/?wpmfeedkey=1;2e7e48ca65d94e5f0ec1baae46e4972c
                    [wpm_login_date] => 1392155735
                    [wpm_login_ip] => 62.68.119.252
                )

            [Sequential] => 
            [Levels] => Array
                (
                    [1391447566] => stdClass Object
                        (
                            [Level_ID] => 1391447566
                            [Name] => Team Membership
                            [Cancelled] => 
                            [CancelDate] => 
                            [Pending] => 
                            [UnConfirmed] => 
                            [Expired] => 
                            [ExpiryDate] => 1393866766
                            [SequentialCancelled] => 
                            [Active] => 1
                            [Status] => Array
                                (
                                    [0] => Active
                                )

                            [Timestamp] => 1391447566
                            [TxnID] => WL-1-1391447566
                        )

                )

            [PayPerPosts] => Array
                (
                )

        )

)

4 个答案:

答案 0 :(得分:1)

<?php
   $nameInFirstLevelsElement = current($response["member"][0]["levels"])->Name
?>

这应该可以从第一个Name元素中检索levels

答案 1 :(得分:1)

“顺序”旁边的空白区域表示它没有值。所以那不是你要找的那个。

此外,其中一个级别表示“stdClass对象”,这意味着您可以通过->运算符访问其成员。

让我们去除一分钟无关紧要的事情。我认为这有助于您理解数据结构:

Array
(
    [0] => Array
        (
            [Levels] => Array
                (
                    [1391447566] => stdClass Object
                        (
                            [Level_ID] => 1391447566
                            [Name] => Team Membership
                        )
                )
        )

)

所以这会奏效:

$object = $response["member"][0]["Levels"][1391447566];
$name = $object->Name;

修改

如果级别索引每次都改变,那么将它拉开一点......

$levels = $response["member"][0]["Levels"];
$firstLevel = array_shift(array_values($levels));
$name = $firstLevel->Name;

请点击此处获取有关从$levels数组中获取第一个元素的正确答案:https://stackoverflow.com/a/3771228/266374

答案 2 :(得分:1)

答案可能是按照官方文档使用array_walk_recursivehttp://www.php.net/manual/en/function.array-walk-recursive.php

<?php

$properties = new stdClass();
$properties->names = [];
function extractNames($levels, $key, $properties) {
    if (
        is_object($levels) &&
        array_key_exists('Name', get_object_vars($levels)) &&
        array_key_exists('Level_ID', get_object_vars($levels))
    ) {
        $properties->names[] = $levels->Name;
    }
}
array_walk_recursive($response, 'extractNames', $properties);
echo print_r($properties, true);

答案 3 :(得分:1)

如果&#39;级别下的数字&#39;数组不会相同,你可以使用foreach来取出名字&#39;信息。

foreach ($response[0]['Levels'] AS $level_key => $level_val) {
    $level_name = $level_key->Name;
}

echo 'Name: '.$level_name;

如果只有一个元素,那么它会抓住它。如果“级别”下有多个号码,则会循环显示这些号码,并将每个号码分配给“#level_name&#39;”,覆盖之前的任何分配。换句话说,只会捕获它找到的最后一个。

编辑: 在示例中,我错误地尝试从Name而不是$key抓取$val。这是正确的方法:

foreach ($response[0]['Levels'] AS $level_key => $level_val) {
    $level_name = $level_val->Name;
}

echo 'Name: '.$level_name;

Here is a demo of the working code