使用未设置的结果而不在php中定义新数组

时间:2013-04-28 10:59:47

标签: php arrays implode on-the-fly

我正在尝试以这种方式创建动态链接:

  • 拿一个阵列
  • 搜索一个元素的键
  • 删除此元素
  • 将数组元素内嵌到字符串
  • 在链接
  • 中将字符串显示为参数

我这样做如下:

 $url_langs=array('fra','cat','hun'...); //CURRENT LANGS in use

 $all_langs=array('eng','fra','por','ser','cat','dan','hun','fin','est','esl',...);

 foreach($all_langs as $lang){
    echo (in_array($lang,$url_langs))?'<a href="' . implode('|',unset($url_langs[array_search($lang,$url_langs)])) . '">' . $lang . '</b> ':'<a href="' . implode('|',$url_langs) . '|' . $lang . '">' . $lang . '</a> ';
 }

嗯,正如你所看到的那样。我迭代包含所有可用语言的数组,并检查它是否已经在使用中。如果它正在使用中,我会显示一个不使用它的链接;对于相反的情况也一样。

正如php manual (unset)所说:“没有返回任何值。”。所以我不能在飞行中使用unset。我的问题是:

  1. 是否有替代形式来实现它?
  2. 我可以使用long if句子,并定义一个新数组,然后我将用于implode()函数。但是,这不奇怪吗?如果我的目标是以纯文本形式创建一个新数组?
  3. 我可以使用str_replace一旦内爆就删除了这部分字符串...但是我不能动态地执行它。
  4. 非常感谢。

2 个答案:

答案 0 :(得分:1)

array_diff(a1,a2)将返回a1值不在a2中的数组。 因此,将$ lang转换为数组值($ lang)并获取数组差异将为您提供所需的值

您在第一个</a>

时也错过了<a href=
$url_langs=array('fra','cat','hun'...); //CURRENT LANGS in use
$all_langs=array('eng','fra','por','ser','cat','dan','hun','fin','est','esl',...);
foreach($all_langs as $lang){
    echo (in_array($lang,$url_langs)) ? 
          '<a href="' 
         . implode('|',array_diff($url_langs, array($lang))) 
         . '">' . $lang . '</a></b> '     :
          '<a href="' 
         . implode('|',$url_langs) . '|' . $lang . '">' . $lang . '</a> ';
}

答案 1 :(得分:0)

我会在你的情况下使用array_diff

$new_langs = array_diff($all_langs, $url_langs);
print_r($new_langs);
// this will print
// Array([0] => eng [2] => por [3] => ser [5] => dan [7] => fin [8] => est [9] => esl)