我有一个读取JSON文件的PHP代码。下面是JSON示例的一部分:
"Main": [{
"count": 7,
"coordinates": [89,77],
"description": "Office",
},{
"count": 8,
"coordinates": [123,111],
"description": "Warehouse",
}]
并且我正在尝试编写PHP以仅获取那些描述包含在Warehouse
等标准中的信息(计数,坐标,描述)。下面的PHP示例
$validcriteria = array("Warehouse", "Parking_lot");
如果“描述”包含在有效标准中,我如何先执行if语句检查。我尝试了下面的代码,但它似乎不正常。
$JSONFile = json_decode($uploadedJSONFile, false);
foreach ($JSONFile as $key => $value)
{
if (in_array($key['description'] , $validcriteria))
{
#more codes here
}
}
我在PHP中的代码一直在工作,除非我尝试添加$key['description']
以尝试首先检查描述是否有效。我上面的代码被重建以删除敏感信息,但我希望你对我想要做的事情有所了解。
答案 0 :(得分:1)
尝试理解已解析的JSON字符串的结构时,请先使用print_r($JSONFile);
检查其内容。在您的情况下,您会发现有一个外键'Main'
,它包含一个子数组数组。您将需要遍历该外部数组。
// Set $assoc to TRUE rather than FALSE
// otherwise, you'll get an object back
$JSONFile = json_decode($uploadedJSONFile, TRUE);
foreach ($JSONFile['Main'] as $value)
{
// The sub-array $value is where to look for the 'description' key
if (in_array($value['description'], $validcriteria))
{
// Do what you need to with it...
}
}
注意:如果您希望继续在$assoc
中将false
参数设置为json_decode()
,请检查结构以了解对象的布局方式,并使用->
运算符而不是数组键。
$JSONFile = json_decode($uploadedJSONFile, FALSE);
foreach ($JSONFile->Main as $value)
{
// The sub-array $value is where to look for the 'description' key
if (in_array($value->description, $validcriteria))
{
// Do what you need to with it...
}
}
您也可以考虑使用array_filter()
进行测试:
$included_subarrays = array_filter($JSONFile['Main'], function($a) use ($validcriteria) {
return in_array($a['description'], $validcriteria);
});
// $included_subarrays is now an array of only those from the JSON structure
// which were in $validcriteria
答案 1 :(得分:0)
鉴于您的JSON结构,您可能需要
foreach($decoded_json['Main'] as $sub_array) {
if (in_array($sub_array['description'], $validation)) {
... it's there ...
}
}
答案 2 :(得分:0)
因为你将false设置为json_decode函数的第二个参数,所以它作为一个对象返回, 如果你把它改为TRUE,那么代码就可以了。
http://php.net/manual/en/function.json-decode.php
并且您必须将键更改为值;
foreach ($JSONFile->Main as $key => $value)
{
if (in_array($value->description, $validcriteria))
{
#more codes here
}
}
此代码假设您的json文件的深度比您的示例大一个。这就是为什么$ JSONFile->主要在foreach循环中。
答案 3 :(得分:-1)
尝试使用:
if ( array_key_exists('description', $key) )