php
  • arrays
  • cookies
  • foreach
  • 2016-07-26 77 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哎呀我错过了。我很高兴它的工作。 –

    相关问题