【问题标题】:If array_search query is not found如果未找到 array_search 查询
【发布时间】:2013-03-24 11:32:39
【问题描述】:

我最近在 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'];

然后使用简单的&lt;?php echo $uk_rating; ?&gt;/&lt;?php echo $us_rating; ?&gt; 将其解析到页面中。

我发现,有些数组实际上并不包含查询正在搜索的数据,例如以下没有英国评级或发布日期的数据:

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 ($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
                            }

【问题讨论】:

    标签: php database arrays if-statement


    【解决方案1】:

    !== 运算符检查是否相等 类型。在您的示例中 - 如果数组中不存在 UK - 解释器将(标记警告并)将值 null 分配给 $uk_date。 (即,不是空字符串)。

    如果您将!== 更改为!=,它应该可以工作,但最佳实践通常也包括消除警告,因此为了完整性,您应该对阵列本身进行检查。

    if(isset($releases['countries'][$uk_release])){
      // UK exists in array
    } else {
      // does not
    }
    

    另一个答案也解决了这个问题 - 它只是一个简写 ternary-operator
    (与 条件 if-else 相反)。

    【讨论】:

    • 感谢您的帮助,我该如何检查阵列本身?我是否必须将 else {} 语句附加到搜索数组的 if 中,如果是,我将如何处理?
    • 这是条件运算符,是a三元运算符。
    • 这非常有效,并在其中加上一个小的 IF 语句,以查看是否存在各个元素(例如认证和发布日期)。谢谢!
    【解决方案2】:

    试试

    $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']:'';
    

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 2021-08-04
      • 2014-12-25
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2016-12-21
      相关资源
      最近更新 更多