问题描述
我需要一些帮助来解析和使用PHP浏览JSON结果。在下面的示例结果中,我需要检查技术的类别。
我希望得到的结果是,如果找到了类别分析,则使用真实变量进行标记,并使用分析名称(例如“ Google Analytics”)设置变量
这是示例代码
foreach ($resp['technologies'] as $item) {
if ($item['categories'][0] === 'analytics') {
$found = true;
$analyticsis= $item['name'];
这是我们正在浏览的示例JSON。
[{
"url": "https://www.websiteexample.co.uk","technologies": [{
"slug": "google-analytics","name": "Google Analytics","versions": [],"trafficRank": 0,"categories": [{
"id": 10,"slug": "analytics","name": "Analytics"
},{
"id": 61,"slug": "saas","name": "SaaS"
}
]
}
解决方法
首先,json
是一个字符串。
如果您有json,则应对其进行解析:
$data = json_decode($json,true);
如果“ json”是数组,则不是json,而是数组。
搜索
只需遍历您的结构,找到所需的内容后,停止并保存所有必要的数据:
$json = <<<'JSON'
[{
"url": "https://www.websiteexample.co.uk","technologies": [{
"slug": "google-analytics","name": "Google Analytics","categories": [
{"id": 10,"slug": "analytics","name": "Analytics"},{"id": 61,"slug": "saas","name": "SaaS"}
]
}]
}]
JSON;
$data = json_decode($json,true);
$needle = 'analytics';
$foundTech = null;
$foundCategory = null;
foreach ($data as $resp) {
foreach ($resp['technologies'] as $tech) {
foreach ($tech['categories'] as $category) {
if ($category['slug'] === $needle) {
$foundTech = $tech;
$foundCategory = $category;
break 3;
}
}
}
}
if ($foundCategory) {
echo $foundTech['name'],PHP_EOL;
echo $foundCategory['name'],PHP_EOL;
}
Google Analytics Analytics
如果您需要在该结构中进行多个搜索,最好先创建一些地图/索引。
, $item['categories'][0]
是一个关联数组,analytics
在slug
元素中。
if ($item['categories'][0]['slug'] == 'analytics') {
$found = true;
$analyticsis = $item['name'];
}
您可能应该搜索所有类别,而不仅仅是选中[0]
。
foreach ($item['categories'] as $category) {
if ($category['slug'] == 'analytics') {
$found = true;
$analyticsis = $item['name'];
break;
}
}