2013-03-24 35 views
1

我最近在Stack - Search array for specific string上發佈了這個問題 - 並得到了我的問題的完美答案,我標記爲正確。不過,我現在有一個相關的問題,我覺得很難解決,但它看起來應該很容易!如果沒有發現array_search查詢

...我已經尋找字符串「GB」和「的陣列美國」使用以下,這是提供給我在以前的帖子:

/* 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語句來檢查兩個查詢之一是否爲null,空,==「」等等,但似乎沒有任何工作。目前,我正在嘗試以下方法,基本上使用邏輯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 
          } 

回答

1

平等類型的!==操作檢查。在你的例子中 - 如果英國不在陣列中 - 解釋器將會(標記一個警告並且)將值null指定爲$uk_date。 (IE。不是空字符串)。

如果您將!==更改爲!=它應該可以工作但是最佳實踐,儘管通常還包括消除警告,因此爲了完整性您的檢查應該在陣列本身上進行。

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

對方回答解決了這個太 - 它只是一個短手ternary-operator
(而不是在條件的if-else)。

+0

感謝您的幫助,我將如何對陣列本身進行檢查?我是否需要附加一個else {}語句來搜索該數組,如果是這樣,我該如何處理這個問題? – 2013-03-24 11:55:41

+0

@AlexRyans更新了答案。 – Emissary 2013-03-24 12:01:02

+0

這是條件運算符,它是* a *三元運算符。 – 2013-03-24 12:02:55

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