array_map函数返回空变量

时间:2018-06-21 11:37:33

标签: php arrays string function array-map

array_map(function ($id) use ($filename) {
                $keyword = Keyword::find($id)->name;
                $filename .= $keyword . '-';
                Log::info($filename);
            }, $input['keyword_id']);

我想在我的文件名字符串变量中添加关键字的名称,但是我在日志中看到的值就像:

keyword1
keyword2

我想要的输出是一个字符串作为一行。

keyword1keyword2 

但是正如您所看到的,每次它更改字符串而不是附加字符串。

3 个答案:

答案 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