2 回答
TA贡献1813条经验 获得超2个赞
因此,您的数据如下所示:
$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
)
TA贡献1793条经验 获得超6个赞
您可以使用array_map,array_key_exists以检索了name从数组索引
$jsonFormat = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';
$jsonArray = json_decode($jsonFormat,true);
$res = [];
array_map(function($v) use (&$res){
if(array_key_exists('name', $v)){
$res[] = $v['name'];
}else{
foreach($v as $_key => $_value){
$res[] = $_value['name'];
}
}
}, $jsonArray);
echo '<pre>';
print_r($res);
结果:-
Array
(
[0] => Plafond
[1] => Chaudière
[2] => Pla
[3] => Toc
)
您可以$res用来比较名称。
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报