php - PHP如何解析不同级别的数组
问题描述
在 foreach 循环中,我想比较不同数组之间的 [name] 值,但它们的级别不同。
Array(
[array1] => Array
(
[0] => WP_Term Object
(
[name] => Plafond
)
)
[array2] => WP_Term Object
(
[name] => Chaudière
)
[array3] => Array
(
[0] => WP_Term Object
(
[name] => Pla
)
[1] => WP_Term Object
(
[name] => Toc
)
)
)
我不知道如何在同一循环中获得 [name] 而级别不同。我试图使:
foreach( $fields as $name => $value )
{
echo $value->name; }
我应该在第一个循环中添加另一个循环吗?谢谢
解决方案
所以你的数据看起来像这样:
$json = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';
$array = json_decode($json);
如果你不知道它会走多远,一个简单的递归函数应该可以工作。也许是这样的:
function get_name($o, &$output) {
if (is_array($o)) {
foreach($o as $v) {
get_name($v, $output);
}
} elseif (property_exists($o, "name")) {
$output[] = $o->name;
}
}
$output = [];
foreach ($array as $v) {
get_name($v, $output);
}
如果您的数据看起来像您提供的样本(即它始终是第一级或第二级),那么您无需担心递归。
$output = [];
foreach ($array as $k=>$v) {
if (is_array($v)) {
foreach ($v as $k2=>$v2) {
$output[] = $v2->name;
}
} else {
$output[] = $v->name;
}
}
无论哪种方式,您的输出值都在$output
数组中:
print_r($output);
输出:
Array
(
[0] => Plafond
[1] => Chaudière
[2] => Pla
[3] => Toc
)
推荐阅读
- regex - 正则表达式在 VIM 中使用正则表达式交换两个文本
- python - 解析 HTML 文件并存储标题
- javascript - 如何根据主对象中存在的其他值在另一个对象数组中的数组中添加对象
- ruby-on-rails - rails route: same url pattern with different parameter
- gradle - 在 gradle kotlin dsl 中,如何调用动态测试扩展?
- kubernetes - Kubernetes traefik 通过特定的内部 IP
- freemarker - 如何在循环时在两个单独的列中打印 Freemarker 列表选项
- ruby-on-rails - 注销功能对 Ruby on Rails 不起作用?我无法删除会话
- c# - 添加对我们项目的引用后出现 WPF InitializeComponent() 错误
- node.js - 当将 docker 容器上托管的 cassandra 与 nodejs 连接时,得到 NoHostAvailableError: No host could be resolve