1

私は最近、この質問をStack(特定の文字列の配列を検索)に投稿し、正しいとマークした質問に対する完全な回答を得ました。しかし、私は今、解決するのが難しいと感じている関連する問題を抱えていますが、それは非常に簡単なはずです!

前回の投稿で提供された次の文字列を使用して、配列で文字列「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
                )

        )

)

2つのクエリのいずれかがnull、empty、== ""などであるかどうかを確認するために、さまざまなIFステートメントを作成しようとしましたが、何も機能しないようです。現在、私は次のことを試みています。基本的に、どちらの結果もゼロに等しくない場合はロジックを使用し、両方を表示するか、2つのうちの一方が空の場合は、空でない方のみを表示します(フォーマットについてお詫びします)。

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
                            }
4

2 に答える 2

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']:'';
于 2013-03-24T11:41:58.237 に答える
1

!==オペレーターは、等しいかタイプかチェックします。あなたの例では、UKが配列に存在しない場合、インタプリタは(警告にフラグを立てて)値nullをに割り当てます$uk_date。(つまり、空の文字列ではありません)。

変更!==した!=場合は機能するはずですが、通常は警告も削除する必要があるため、整合性を保つためにアレイ自体でチェックを行う必要があります。

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

もう1つの答えもこれを解決します。これは、(条件付きのif-elseとは対照的に)単なる三項演算子です。

于 2013-03-24T11:42:32.397 に答える