在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