使用数组中的一些数据,如果值为空,则从另一个数组中使用它

时间:2016-07-26 11:55:27

标签: php arrays cookies foreach

我有2个数组,一个数组有默认值,如果主数组中的值为空或者根本没有设置,则应使用默认值。
我设置了名为'lang'的cookie,其值为'ru''lv''en' 。因此,如果将cookie设置为'en',则php应仅使用在变量末尾包含“en”的数据。

我在此之前设定:

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

在这里,我获得了Cookie 'lang'值,即'en':

$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>";
    }
}

我希望它有意义,我真的很感激任何帮助!

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你只是问如何使用默认数组的相应值填充主数组的空值。

您可以使用?: (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];

    }
}

要回答问题的第二部分,我不太确定“使用”是什么意思,但下面只通过匹配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

    }
}