检查 JSON 字段的子字段是否包含值 (PHP)
Check if any of a JSON's field's subfield contains a value (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'])
获取元素计数。知道这个计数值后,你就可以用它做你想做的事了。
我想检查 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'])
获取元素计数。知道这个计数值后,你就可以用它做你想做的事了。