我最近在Stack上发布了这个问题 - Search array for specific string - 并且得到了我的问题的完美答案,我将其标记为正确。不过我现在有一个相关的问题,我觉得很难解决,但看起来应该很容易!
我使用以下内容在数组中搜索字符串'GB'和'US',这是在上一篇文章中提供的:
/* Get Movie release dates */
$releases = $tmdb->getMovieReleases($tmdb_id);
echo "<pre>";
print_r($releases);
echo "</pre>";
$uk_release = -1;
foreach($releases['countries'] as $k=>$v) {
if(array_search('GB', $v)) {
$uk_release = $k;
break;
} else {
$uk_release = null;
}
}
$us_release = -1;
foreach($releases['countries'] as $k=>$v) {
if(array_search('US', $v)) {
$us_release = $k;
break;
} else {
$us_release = null;
}
}
$uk_rating = $releases['countries'][$uk_release]['certification'];
$us_rating = $releases['countries'][$us_release]['certification'];
然后使用简单的<?php echo $uk_rating; ?>
/ <?php echo $us_rating; ?>
将其解析到页面中。
我发现,但是某些数组实际上并不包含查询正在搜索的数据,例如以下内容,它没有英国评级或发布日期:
Array
(
[id] => 13655
[countries] => Array
(
[0] => Array
(
[iso_3166_1] => US
[certification] => G
[release_date] => 2008-06-20
)
[1] => Array
(
[iso_3166_1] => CA
[certification] =>
[release_date] => 2008-06-20
)
[2] => Array
(
[iso_3166_1] => JP
[certification] =>
[release_date] => 2008-08-01
)
)
)
我试图构造各种IF语句来检查两个查询中的一个是否为空,空,==“”等等,但似乎没有任何效果。目前,我正在尝试以下内容,基本上使用逻辑IF,结果都不等于什么,显示两者,或者如果其中一个是空的,只显示非空的那个(格式化道歉): / p>
if ($uk_date !== "" && $us_date !== "") {?>
<section class="span3">
<p class="overview-title">RELEASE DATE</p>
<p class="section_body">
<?php echo $uk_date; ?> (UK)<br>
<?php echo $us_date; ?> (US)
</p>
</section><?php
} else if ($uk_date = "") {?>
<section class="span3">
<p class="overview-title">RELEASE DATE</p>
<p class="section_body">
<?php echo $us_date; ?> (US)
</p>
</section><?php
} else if ($uk_date == "") {?>
<section class="span3">
<p class="overview-title">RELEASE DATE</p>
<p class="section_body">
<?php echo $uk_date; ?> (UK)
</p>
</section><?php
}
答案 0 :(得分:1)
尝试
$uk_rating = isset($releases['countries'][$uk_release]['certification'])?$releases['countries'][$uk_release]['certification']:'';
$us_rating = isset($releases['countries'][$us_release]['certification'])?$releases['countries'][$us_release]['certification']:'';
答案 1 :(得分:1)
!==
运算符检查等式和类型。在您的示例中 - 如果数组中不存在UK - 解释器将(标记警告并)将值null
分配给$uk_date
。 (IE。不是空字符串)。
如果您将!==
更改为!=
它应该可以正常工作,但最佳做法通常还包括消除警告,以便完整性,您应该对阵列本身进行检查。
if(isset($releases['countries'][$uk_release])){
// UK exists in array
} else {
// does not
}
另一个答案也解决了这个问题 - 它只是一个简短的ternary-operator
(与条件 if-else相反)。