php
  • arrays
  • cookies
  • foreach
  • 2016-07-26 78 views 1 likes 
    1

    我有2個數組,一個數組具有默認值,應該在主數組中的值爲空或根本沒有設置時使用這些默認值。
    我已經設置cookie的所謂'郎'與價值'RU''LV''恩'。所以如果cookie設置爲'en',php應該只使用變量末尾有'en'的數據。使用數組中的一些數據,如果值爲空,則從另一個數組中使用它

    這個我之前設置的所有:

    $pTitleru = "111"; 
    $pTitlelv = ""; 
    $pTitleen = ""; 
    $ogTitleru = '2222'; 
    $ogTitlelv = ''; 
    $ogTitleen = ''; 
    $ogType = '333'; 
    $ogDescrru = '4444'; 
    $ogDescrlv = ''; 
    $ogDescren = ''; 
    $ogImgru = '555'; 
    $ogImglv = ''; 
    $ogImgen = ''; 
    

    在這裏,我得到的cookie '郎'價值,這是 '恩':

    $cookielang = $_COOKIE[$lang]; // $cookielang = 'en' 
    

    這裏是陣列使用默認值即應僅當原始值未設置或空時才使用:

    $ogDefMetas = array(
        '$pTitleru' => 'wwww', 
        '$pTitlelv' => 'eeee', 
        '$pTitleen' => 'rrrr', 
        '$ogTitleru' => 'tttt', 
        '$ogTitlelv' => 'yyyy', 
        '$ogTitleen' => 'uuuu', 
        '$ogType' => 'iiii', 
        '$ogDescrru' => 'oooo', 
        '$ogDescrlv' => 'pppp', 
        '$ogDescren' => 'ssss', 
        '$ogImgru' => 'ddd', 
        '$ogImglv' => 'fff', 
        '$ogImgen' => 'ggg', ); 
    

    而這裏的主陣列:

    $ogMetas = array(
        '$pTitleru' => $ptitleru, 
        '$pTitlelv' => $ptitlelv, 
        '$pTitleen' => $ptitleen, 
        '$ogTitleru' => $ogTitleru, 
        '$ogTitlelv' => $ogTitlelv, 
        '$ogTitleen' => $ogTitleen, 
        '$ogType' => $ogType, 
        '$ogDescrru' => $ogDescrru, 
        '$ogDescrlv' => $ogDescrlv, 
        '$ogDescren' => $ogDescren, 
        '$ogImgru' => $ogImgru, 
        '$ogImglv' => $ogImglv, 
        '$ogImgen' => $ogImgen,); 
    

    我已經成功地得到是空值,但不知道下一步該怎麼做:(

    foreach ($ogMetas as $ogMeta => $ogMetaVal) { 
        if (empty($ogMetaVal)) { 
         echo "this '".$ogMeta."' is empty <br>"; 
        } 
    } 
    

    我希望這是有道理的,我會非常感謝任何幫助!

    +0

    無關,但每個陣列末尾不應該有一個逗號 –

    +0

    您是什麼意思?什麼應該發生的元素,哪裏或價值存在? –

    +0

    @JulianKuchlbauer對此不確定,但最終我能夠簡單地將最終結果回顯爲html:「/> –

    回答

    1

    如果我正確理解你的問題,你只是問如何用默認數組的相應值填充主數組的空值。


    可以使用?: (ternary) assignment operator作爲一個更直接的替代權限分配給該變量分配默認值,而不是創建一個循環做到這一點。

    下面是修改$ogMetas初始化:

    $ogMetas = array(
        '$pTitleru' => $ptitleru ?: $ogDefMetas['$ptitleru'], 
        '$pTitlelv' => $ptitlelv ?: $ogDefMetas['$ptitlelv'], 
        '$pTitleen' => $ptitleen ?: $ogDefMetas['$ptitleen'], 
        '$ogTitleru' => $ogTitleru ?: $ogDefMetas['$ogTitleru'], 
        '$ogTitlelv' => $ogTitlelv ?: $ogDefMetas['$ogTitlelv'], 
        '$ogTitleen' => $ogTitleen ?: $ogDefMetas['$ogTitleen'], 
        '$ogType' => $ogType ?: $ogDefMetas['$ogType'], 
        '$ogDescrru' => $ogDescrru ?: $ogDefMetas['$ogDescrru'], 
        '$ogDescrlv' => $ogDescrlv ?: $ogDefMetas['$ogDescrlv'], 
        '$ogDescren' => $ogDescren ?: $ogDefMetas['$ogDescren'], 
        '$ogImgru' => $ogImgru ?: $ogDefMetas['$ogImgru'], 
        '$ogImglv' => $ogImglv ?: $ogDefMetas['$ogImglv'], 
        '$ogImgen' => $ogImgen ?: $ogDefMetas['$orImgen'] 
    ); 
    

    然而,因爲上面顯得有些笨重,如果你想與你的循環穿過去,你只需要設置的值:

    foreach ($ogMetas as $ogMeta => $ogMetaVal) { 
        if (empty($ogMetaVal)) { 
    
         // this line changed 
         $ogMetas[$ogMeta] = $ogDefMetas[$ogMeta]; 
    
        } 
    } 
    

    要回答你的問題的第二部分,我真的不知道WH在你的意思是「使用」,但下面只是通過匹配substr()迭代匹配數組元素。如果你想保持你的填充默認值的方法,你可以將它與這個循環合併(循環是相同的;嵌套if語句)。

    foreach($ogMetas as $ogMeta => $ogMetaVal) { 
        if(substr($ogMeta, strlen($ogMeta)-2, 2) == $cookielang) { 
    
         // code to deal with the array elements with the right $cookielang 
    
        } 
    } 
    
    +0

    @MaximSlotov如果我的回答對您有幫助,請務必接受它(點擊綠色複選標記n分機到我的答案),以顯示它的社區它的工作!謝謝! –

    +0

    是的!謝謝!一切正常,除了這一個,這裏是工作線:(substr($ ogMeta,strlen($ ogMeta)-2)== $ cookielang) –

    +0

    @MaximSlotov哎呀我錯過了。我很高興它的工作。 –

    相關問題