如何解决检查任何 JSON 字段的子字段是否包含值 (PHP)
我想检查 JSON 字段的任何子字段是否包含字符串。我事先不知道子字段的数量。
特别想看看有没有...
$obj['message']['license'][**0**]['URL']
$obj['message']['license'][**1**]['URL']
$obj['message']['license'][**2**]['URL']
$obj['message']['license'][**3**]['URL']
$obj['message']['license'][**XYZ**]['URL']
...(其中 XYZ 可以是任何数字,具体取决于 license
字段下的子字段数)包含值 creativecommons
。
如果是,则名为 $oa_lic
的变量应为包含 creativecommons
的值,否则 $oa_lic
应为 NULL
。
示例 1:在 https://api.crossref.org/works/10.1002/poi3.263 处,$oa_lic
应为 NULL
。
示例 2:在 https://api.crossref.org/works/10.1016/j.polgeo.2021.102404 处,$oa_lic
应为 http://creativecommons.org/licenses/by/4.0/
。
如果 XYZ 只是 0
,我已经有了这样做的代码:
<?php
$crossrefurl = "https://api.crossref.org/works/10.1016/j.polgeo.2021.102404";
// make request
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$crossrefurl);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$output = curl_exec($ch);
// convert response
$obj = json_decode($output,true);
if(!isset($obj['message']['license'][0]['URL'])) {
echo '<p><u>OA License</u>: none</p>';
$oa_lic = NULL;
}
else {
if(isset($obj['message']['license'][0]['delay-in-days'])) {
if($obj['message']['license'][0]['delay-in-days'] == 0) {
if(strpos($obj['message']['license'][0]['URL'],'creativecommons') !== false) {
$oa_lic = $obj['message']['license'][0]['URL'];
echo '<p><u>OA License</u>: '.$oa_lic.'</p>';
}
else {
$oa_lic = NULL;
echo '<p><u>OA License</u>: there is a license,but it is not Creative Commons</p>';
}
}
}
else {
$oa_lic = NULL;
echo '<p><u>OA License</u>: there seems to be an embargo?</p>';
}
}
但是如何有效地计算 licenses
下子字段的数量,然后检查它们的任何子字段 URL
是否包含字符串 creativecommons
?
感谢您的帮助!
解决方法
迭代 $obj['message']['license']
然后使用 count($obj['message']['license'])
获取元素计数。知道这个计数值后,您就可以用它做什么了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。