php 通过将字符串应用为标记的href和文本,将字符串的1d数组转换为锚超链接< a>

1sbrub3j  于 2023-05-21  发布在  PHP
关注(0)|答案(5)|浏览(117)

我想把数组的所有元素都用类似的东西 Package 起来,但我不想有很多行或foreach循环

$links = array('london','new york','paris');

结果应该是

<a href="#london">london</a>
<a href="#new york">new york</a>
<a href="#paris">paris</a>
jgzswidk

jgzswidk1#

array_map怎么样?

$links   = array('london', 'new york', 'paris');
$wrapped = array_map(
   function ($el) {
      return "<a href=\"#{$el}\">{$el}</a>";
   },
   $links
);

Demo(单击源代码)
没有PHP > 5.3,你就不能使用lambda函数,所以你需要这样的东西:

function wrap_those_links($el)  { 
      return "<a href=\"#{$el}\">{$el}</a>"; 
}

$links   = array('london', 'new york', 'paris');
$wrapped = array_map('wrap_those_links', $links);

Demo for PHP 5.2(再次单击源)

pinkon5k

pinkon5k2#

试试join('\n', array_map(function($a) { return "<a href=\"#$a\",>$a<\\a>";}, $links));

neekobn8

neekobn83#

在现代PHP版本中,它可以缩短如下。

$wrapper = static fn (string $link): string => \sprintf('<a href="#%1$s">%1$s</a>', $link);
$result = \array_map($wrapper, $links);
llew8vvj

llew8vvj4#

可重复使用的功能。

function array_wrap_template($array, $template, $rep="{{el}}")
{
    return array_map(function($el)use($template, $rep){
        return str_replace($rep, $el, $template);
    }, array_values($array));
}

$links = array('london','new york','paris');
$wrapped = array_wrap_template($links, "<a href=\"#{{el}}\">{{el}}</a>");
wfveoks0

wfveoks05#

另一个尚未提到的技术是使用preg_replace()--它将很好地迭代字符串数组--尽管,显然这不是一个实际需要正则表达式模式的任务。(Demo

$links = array('london','new york','paris');
var_export(
    preg_replace('/.+/', '<a href="#$0">$0</a>', $links)
);

否则,您可以通过对城市字符串(用作href值)调用urlencode()来进一步生成编码的url。

var_export(
    array_map(
        fn($city) => sprintf('<a href="#%s">%s</a>', urlencode($city), $city),
        $links
    )
);

相关问题