我想把数组中的所有元素都包装成这样但是我不想要很多行或者foreach循环
$links = array('london','new york','paris');
结果应该是
<a href="#london">london</a>
<a href="#new york">new york</a>
<a href="#paris">paris</a>
array_map呢?
$links = array('london', 'new york', 'paris');
$wrapped = array_map(
function ($el) {
return "<a href='"#{$el}'">{$el}</a>";
},
$links
);
演示(点击源代码)
如果没有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);
PHP 5.2的演示(再次单击Source)
尝试join(''n', array_map(function($a) { return "<a href='"#$a'",>$a<''a>";}, $links));
在现代PHP版本中可以缩短如下:
$wrapper = static fn (string $link): string => 'sprintf('<a href="#%1$s">%1$s</a>', $link);
$result = 'array_map($wrapper, $links);
可重用的功能。
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>");
还没有提到的另一种技术是使用preg_replace()
——它将愉快地迭代字符串数组——尽管这显然不是一个实际需要正则表达式模式的任务。(演示)
$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
)
);