0

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

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

我这样做如下:

 $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 手册(未设置)所说:“没有返回值。” . 所以我不能即时使用 unset 。我的问题是:

  1. 是否有任何替代形式来实现它?
  2. 我可以使用长if句,并定义一个新数组,然后将其用于 implode() 函数。但是,这不是很奇怪吗?如果我的目标是使其成为纯文本,请创建一个新数组?
  3. 一旦内爆,我可以使用 str_replace 删除这部分字符串......但这我也不能即时执行。

非常感谢。

4

2 回答 2

1

array_diff(a1, a2) 将返回不在 a2 中的 a1 值的数组。因此,将 $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> ';
}
于 2013-04-28T11:14:31.627 回答
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)
于 2013-04-28T11:10:18.820 回答