2014-02-11 64 views
1

我有这样的:从阵列中检索,简单的PHP

print_r($response["member"]); 

我需要检索namelevels下,它是在底部,我应该怎么写呢: 我认为$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] => [email protected] 
        [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 
       (
       ) 

     ) 

) 
+0

顺序没有任何关系在里面,尝试这样做只是水平。 – steinmas

回答

1

的答案可能是由以下官方文档使用array_walk_recursive:如果“水平”数组数下赢得 http://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); 
+0

我明白了,所以如果我有多个名字,它会将它们添加到数组中。这是我一直在寻找的,谢谢! –

+0

可能有某处引用丢失(或者可能用另一个标准对象替换$ names数组,例如'$ names = new StdClass();'会更有帮助)......我试图通过构建参考数组,但您有主要想法! –

+0

嗯我收到语法错误,意外T_FUNCTION –

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

这应该从第一levels元素检索Name

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

+0

啊哈,这个号码“1391447566”将被指出错误时,都会有可能以某种方式跳过它,否则我们会怎么做呢? –

+0

'array_shift(array_values($ levels))' - >为什么不简单'current($ levels)'? – Flixer

+0

@Flixer在返回关联数组的情况下。我对这个API一无所知,所以我宁愿安全,也不要抱歉。 –

1

不一样,你可以用一个foreach来提取'姓名'信息。

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

echo 'Name: '.$level_name; 

如果只有一个元素,它会抓住它。如果有下“水平”多个号码,那么它会遍历它们并指定每一个以“$ level_name”,覆盖任何以前的任务。换句话说,只有它发现的最后一个将被捕获。

编辑: 在这个例子中,我错误试图抓住从$key代替$valName。这是正确的方法:

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

+0

不起作用。没有抓任何东西。 –

+1

嗯,你是对的。我的代码中有一个错字。你应该从'val'获取'Name',而不是'key'。我会用正确的语法在我的文章中进行更新。 – Quixrick