是否有一种简单的方法可以从一维数组构建链接列表?
例如:
$array = [
'slug-1' => 'Title 1',
'slug-2' => 'Title 2',
'slug-3' => 'Title 3'
]
回应如下:
<a href="slug-1">Title 1</a>, <a href="slug-2">Title 2</a>, <a href="slug-3">Title 3</a>
基本上是一个修改过的内爆函数,可以添加class="something"
等类似的额外参数。
我怀疑是否存在我正在尝试做的事情。
创建全局函数:
app/Http/helpers.php
composer.json
块"files": ["app/Http/helpers.php"]
来修改autoload
composer dump-autoload
如here所述。
不确定如何从这里开始。我尝试将以下代码添加到helpers.php
:
<?php
/**
* Given the array of type ['slug' => 'title', ...]
* create new array of type [ '0' => '<a href="slug">title</a>', ...]
* if $attributes given (also array) as ['id'=>'newLink', 'class'=>'newClass']
* add them to first array to get <a href='slug' id='newLink' class='newClass'>title</a>
*
*
* @param $array, $attributes
* @return array
*/
public function linkifyArray($array, $attributes){
$arrayOfLinks = $array;
return $arrayOfLinks;
}
这没什么,但我试图解释我在评论中试图做的事情。
我相信我可以自己创建此功能,但是当我将上面的代码复制到helpers.php
文件时,我收到内部服务器错误,PHPStorm告诉我他expecting statement
所以我在这里遗漏了一些非常基本的东西,并希望得到一些帮助(最受欢迎的链接),然后才能继续创建我的辅助功能。
如果我以错误的方式接近,请告诉我。
最后,我希望能够在我的应用中随时随地进行操作:
implode(', ', $array->linkifyArray())
在此问题的开头获取$array
的链接列表。
编辑:
我写了这个函数:
public function linkifyArray($array, $attributes) {
$htmlAttributes = '';
//inline attributes before appending them to <a></a>
if (is_array($attributes))
{
foreach ($attributes as $k => $v)
{
$htmlAttributes.= $k.'="'.$v.'" ';
}
}
$arrayOfLinks = [];
//create array of links
if(is_array($array))
{
foreach ($array as $kk => $vv)
{
$arrayOfLinks[]='<a '.$htmlAttributes.' href="'.$kk.'">'.$vv.'</a>';
}
}
return $arrayOfLinks;
}
并尝试在namespace App\Http;
下面添加<?php
,但我仍然收到内部服务器错误。
答案 0 :(得分:2)
这就是我开始工作的方式。
app/Http/helpers.php
<?php
namespace app\Http;
class Helperfunctions {
/**
* Given the array of type ['slug' => 'title', ...]
* create new array of type [ '0' => '<a href='slug'>title</a>]
* if $attributes given (also array), implode them from ['id'=>'newLink', 'class'=>'newClass']
* to <a href='slug' id='newLink' class='newClass'>title</a>
*
*
* @param $array, $attributes, $prefix
* @return array
*/
public static function linkifyArray($array, $attributes, $prefix) {
$htmlAttributes = '';
//inline attributes before appending them to <a></a>
if (is_array($attributes))
{
foreach ($attributes as $k => $v)
{
$htmlAttributes.= $k.'="'.$v.'" ';
}
}
$arrayOfLinks = [];
//create array of links
if(is_array($array))
{
foreach ($array as $kk => $vv)
{
$arrayOfLinks[]='<a '.$htmlAttributes.' href="'.$prefix.$kk.'">'.$vv.'</a>';
}
}
return $arrayOfLinks;
}
}
添加到composer.json
autoload>classmap
:
"autoload": {
"classmap": [
"app/Http/helpers.php"
]
},
运行
composer dump-autoload
在视图中调用该函数:
{!! implode(', ', \app\Http\Helperfunctions::linkifyArray($myModel()->get()->lists('name', 'slug')->toArray(), [], '/prefix-uri/')) !!}
Link到我使用的教程。
答案 1 :(得分:2)
我已经看到,你为自己找到了解决方案。但是如果你不想用类来处理这类东西,你可以使用原始答案的方法。唯一的问题是,在你的helpers.php文件中,你不能使用像public等关键字......
你必须看到这就像一堆没有捆绑在一个类中的函数。在类之外,public关键字会导致错误。
只需在helper.php中按以下方式定义函数:
<?php
function linkifyArray($array, $attributes, $prefix) {
// code
}
然后您只需键入(从答案中取得的示例)
即可在您的应用程序中访问它{!! implode(', ', linkifyArray($myModel()->get()->lists('name', 'slug')->toArray(), [], '/prefix-uri/')) !!}
答案 2 :(得分:0)
public function linkifyArray($array, $attributes){
$arrayOfLinks = $array;
$html = "";
$id = "";
$class = "";
if($attributes['id'])
$id = $attributes['id'];
if($attributes['class'])
$class = $attributes['class'];
foreach($arrayOfLinks as $key=>$val)
{
$html.="<a href='".$key."' id='".$id."' class='".$class."'>".$val."</a>";
}
return $html;
}