我有以下嵌套结构的PHP代码
<?php
$theJson = <<<EOF
{
"date": 1492804820000,
"node1": [{
"id": 57163,
"node1_description": "The node1 description",
"node2": [{
"id": 57163,
"node2_description": "The node2 description",
"dipartments": [{
"id": 57163,
"dip_description": "The dipartment description",
"colorCods": [{
"id": 1,
"description": "Red",
"numbers": {
"num1": 1,
"num2": 23,
"num3": 11
}
}, {
"id": 2,
"description": "Yellow",
"numbers": {
"num1": 3,
"num2": 45,
"num3": 33
}
}, {
"id": 3,
"description": "Green",
"numbers": {
"num1": 31,
"num2": 453,
"num3": 323
}
}, {
"id": 3,
"description": "White",
"numbers": {
"num1": 3,
"num2": 4,
"num3": 3
}
}]
},
{
"id": 57345,
"dip_description": "The dipartment description 2",
"colorCods": [{
"id": 1,
"description": "Red",
"numbers": {
"num1": 4,
"num2": 243,
"num3": 151
}
}, {
"id": 2,
"description": "Yellow",
"numbers": {
"num1": 33,
"num2": 415,
"num3": 3
}
}, {
"id": 3,
"description": "Green",
"numbers": {
"num1": 331,
"num2": 43,
"num3": 33
}
}, {
"id": 3,
"description": "White",
"numbers": {
"num1": 32,
"num2": 42,
"num3": 33
}
}]
}
]
}]
}]
}
EOF;
$theArray = json_decode($theJson, true);
foreach ($theArray['node1'] as $node1) {
echo "Node 1 description :".$node1['node1_description'];
echo "\n";
echo "\n";
foreach ($node1['node2'] as $node2) {
echo "Node 2 description :".$node2['node2_description'];
echo "\n";
echo "\n";
foreach ($node2['dipartments'] as $dip) {
echo "Dipartment description: ".$dip['dip_description'];
echo "\n";
echo "\n";
foreach ($dip['colorCods'] as $colCod) {
echo "Cod: ".$colCod['description'];
echo " - ";
echo "Number: ".$colCod['numbers']['num1'];
echo "\n";
echo "\n";
}
}
}
}
?>
我需要从我的JSON中提取“num *”值。
我的代码工作正常,但似乎嵌套的“for”循环可能不是从我的JSON中提取“num *”值的最有效方法。
替代品或样品?
答案 0 :(得分:2)
您可以使用array_walk_recursive
,然后过滤要收集其值的键:
$result = [];
array_walk_recursive($theArray, function ($value, $key) use (&$result) {
if (preg_match('/^num[0-9]+$/', $key)) {
$result[] = $value;
}
});
print_r($result);
上查看它
答案 1 :(得分:0)
使用此帖子中的建议。 PHP multidimensional array search by value