我有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>";
}
}
我希望它有意义,我真的很感激任何帮助!
答案 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
}
}