【问题标题】:array_map function returning null variablearray_map 函数返回空变量
【发布时间】:2018-06-21 11:37:33
【问题描述】:
array_map(function ($id) use ($filename) {
                $keyword = Keyword::find($id)->name;
                $filename .= $keyword . '-';
                Log::info($filename);
            }, $input['keyword_id']);

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

keyword1
keyword2

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

keyword1keyword2 

但是如你所见,每次它改变字符串而不是追加。

【问题讨论】:

    标签: php arrays string function array-map


    【解决方案1】:

    您想将文件名作为参考传递,我认为它会起作用:

    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 .= '-';
    }
    

    【讨论】:

      【解决方案2】:

      您不会在回调中返回每个项目。

      只需添加:

      return $filename
      

      array_map 回调内部

      【讨论】:

      • 你是对的,但我认为他实际上对array_map()返回的数组不感兴趣,他只是想遍历$input['keywordid']并附加这些关键字名称(由@987654324查找@) 到 $filename - 一个简单的 foreach 也可以实现相同的技巧,但代码更少。
      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2015-02-05
        • 1970-01-01
        • 2018-05-10
        相关资源
        最近更新 更多