【发布时间】:2018-01-10 07:11:23
【问题描述】:
我正在尝试创建一个递归函数,它接受一个数组并查找属性名称children,并从匹配的数组中构造一个数组。
这不是直截了当,因为我不知道我的 JSON 数据的哪个块将包含密钥 children,所以我决定编写一个递归函数。
我试过了
$testDataJson = '
{
"macAddress": "10:20:30:40:50:81",
"type": "HGW",
"children": [{
"macAddress": "98:D6:D6:D8:FF:34",
"pendingMethods": false,
"lastSeen": "2017-05-24T10:36:35",
"lastSeenLight": "GREEN",
"model": "AP7465CE-TN",
"type": "WIRELESS_ACCESS_POINT"
}, {
"macAddress": "44:66:E9:A1:2C:DC",
"pendingMethods": false,
"lastSeen": "2017-05-24T10:39:01",
"lastSeenLight": "GREEN",
"model": "PLC 200+ DIV -TN",
"type": "POWERLINE"
}, {
"macAddress": "D8:C2:A9:1C:44:47",
"pendingMethods": "False",
"lastSeen": "2017-05-24T10:39:01",
"lastSeenLight": "GREEN",
"model": "PG9073",
"type": "POWERLINE",
"children": [{
"macAddress": "22:CD:E6:8F:8C:B8",
"pendingMethods": false,
"lastSeen": "2017-05-24T10:38:16",
"lastSeenLight": "GREEN",
"model": "PG9073",
"type": "POWERLINE"
}, {
"macAddress": "13:E4:AB:33:36:AC",
"pendingMethods": false,
"lastSeen": "2017-05-24T10:29:13",
"lastSeenLight": "GREEN",
"model": "PG9072",
"type": "POWERLINE_WIRELESS_ACCESS_POINT"
}]
}]
}';
$testDataArray = json_decode($testDataJson,true);
function recursiveKeyFinder($array) {
$result = [];
if (!isset($array['children']) AND is_array($array)) {
return $result;
}else {
foreach($array['children'] as $child){
$result['macAddress'] = $child['macAddress'];
}
return recursiveKeyFinder($array);
}
}
var_dump(recursiveKeyFinder($testDataArray));
结果:var_dump() 没有任何结果。
想要的结果:
["macAddress": "98:D6:D6:D8:FF:34",
"macAddress": "44:66:E9:A1:2C:DC",
"macAddress": "D8:C2:A9:1C:44:47",
"macAddress": "22:CD:E6:8F:8C:B8",
"macAddress": "13:E4:AB:33:36:AC"]
我该如何调查?
【问题讨论】:
-
你有无限递归。您正在使用给定的相同数组进行递归调用。您也永远不会返回您在
foreach循环中修改的$result。 -
你想要得到什么结果?
-
现在开车回家会在我回家后立即更新。我正在尝试返回我的结果数组并使我的函数工作。我将添加更多详细信息
-
你不能同时编码和开车吗?你永远不会在这个行业成功。 :)
-
@Barmar :我更新了我的帖子添加了我想要的结果,我试图摆脱我的故障递归函数。
标签: php arrays json search recursion