在PHP中处理关联数组路径列表

在PHP中处理关联数组路径列表,php,associative-array,Php,Associative Array,我有一个数据块,当未序列化时,它看起来与以下类似: Array ( [profile] => Array ( [name] => Array ( [firstName] => Slug [midName] => Foo [lastName] => Bar [formatted] => Slug Foo Bar )

我有一个数据块,当未序列化时,它看起来与以下类似:

Array ( 
    [profile] => Array ( 
        [name] => Array ( 
            [firstName] => Slug 
            [midName] => Foo 
            [lastName] => Bar 
            [formatted] => Slug Foo Bar ) 
        [displayName] => Slug
    )
)
以及存储这些值的路径的表,如下所示:

['profile']['name']['firstName'],
['profile']['name']['lastName'],
...
['profile']['displayName']
我想循环浏览路径列表并检索特定数组的值,但似乎无法了解如何构造数组和路径以获取值:

$pathlist = array(
  ['profile']['name']['firstName'],
  ['profile']['name']['midName'],
  ['profile']['name']['lastName'],
  ['profile']['displayName']
);

$user = array(
  [profile] => array ( 
    [name] => array ( 
      [firstName] => Slug 
      [midName] => Foo 
      [lastName] => Bar 
    ), 
    [displayName] => Slug
  )
);

foreach ($pathlist as $path) {
  // display value using user array and pathitem
  echo $user$path;
}
有人有什么建议吗


谢谢。

你可以使用eval,但我不会。最好从数组中分解['和'],然后说$user[$path]…

如果我理解您的问题,您有一个数据数组,并且希望根据架构数组自动提取值

<?php

$schema = array(
    'profile' => array(
        'name' => array(
            'firstName',
            'midName',
            'lastName'
        ),
        'displayName'
    )
);

$users = array(
    1 => array(
        'profile' => array(
            'name' => array(
                'firstName' => 'Joe',
                'midName'   => 'Pooface',
                'lastName'  => 'Bloggs'
            ),
            'displayName' => 'Joey'
        )
    ),
    2 => array(
        'profile' => array(
            'name' => array(
                'firstName' => 'John',
                'midName'   => 'Weeface',
                'lastName'  => 'Doe'
            ),
            'displayName' => 'Johnny'
        )
    )
);


echo "<pre>";

foreach ($users as $user) {

    foreach ($schema as $k1 => $v1) {
        if (is_array($v1)) {
            foreach ($v1 as $k2 => $v2) {
                if (is_array($v2)) {
                    foreach ($v2 as $k3 => $v3) {
                        if (is_string($v3)) {
                            echo "{$v3}: {$user[$k1][$k2][$v3]}\n";
                        }
                    }
                } else {
                    echo "{$v2}: {$user[$k1][$v2]}\n";
                }
            }
        } else {
            echo "{$v1}: {$user[$v1]}\n";
        }
        echo "\n";
    }
}

echo "</pre>";

如果您只想在未序列化的数组中循环,请使用
数组\u walk\u recursive

firstName => John
midName => Wilberforce
lastName => Doe
displayName => bobthebuilder
输出:


哦!我是如此专注于这些嵌套键,我没有想到只是循环通过愚蠢的事情!这真的帮助我到达了我需要去的地方。谢谢大家!!
$user = array(
    'profile' => array ( 
        'name' => array ( 
            'firstName' => 'John', 
            'midName' => 'Wilberforce', 
            'lastName' => 'Doe' 
        ), 
        'displayName' => 'bobthebuilder'
    )
);

function display($item, $key)
{
        echo "$key => $item\n";
}

array_walk_recursive($user, 'display');
firstName => John
midName => Wilberforce
lastName => Doe
displayName => bobthebuilder