array_map(function ($id) use ($filename) {
$keyword = Keyword::find($id)->name;
$filename .= $keyword . '-';
Log::info($filename);
}, $input['keyword_id']);
我想在我的文件名字符串变量中添加关键字的名称,但是我在日志中看到的值就像:
keyword1
keyword2
我想要的输出是一个字符串作为一行。
keyword1keyword2
但是正如您所看到的,每次它更改字符串而不是附加字符串。
答案 0 :(得分:2)
您想通过文件名作为参考,我认为这样可以工作:
use(&$filename)
如果不这样做,它将不会在函数外部更改$filename
。
编辑: 要针对我的认为提出另一种方法,您正在尝试做
:foreach ($input['keyword_id'] as $index => $id) {
$filename .= Keyword::find($id)->name;
// dont append a "-" if this is the last keyword to be added
if ($index < sizeof($input['keyword_id'])-1)
$filename .= '-';
}
答案 1 :(得分:0)
您不会在回调中返回每个项目。
只需添加:
return $filename
在array_map回调内部
答案 2 :(得分:0)
array_map
只是将一个数组映射到具有相同数量元素的另一个数组。因此,您需要在函数中返回某些内容。可以内含(串联)返回的数组,以将所有关键字组合在一起。
$filename = 'myfile.txt';
$keyword_ids = [1,2];
$keywords = array_map(function ($id) {
return Keyword::find($id)->name;
}, $keyword_ids);
$filename = implode('',$keywords) . '-' . $filename;
Log::info($filename);
print( $filename);
//OUTPUTS keyword1keyword2-myfile.txt