【问题标题】:array_map with str_replacearray_map 和 str_replace
【发布时间】:2019-10-18 03:28:15
【问题描述】:

是否可以将array_mapstr_replace 结合使用而不调用另一个函数来执行str_replace

例如:
array_map(str_replace(' ', '-', XXXXX), $myArr);

【问题讨论】:

  • 你想做什么?将str_replace() 映射到数组,或者将替换为函数名的结果映射到数组?
  • 你为什么不试试呢? :)
  • 数组的每个元素都有str_replace

标签: php str-replace array-map


【解决方案1】:

不需要array_map。来自docs:“如果主题是一个数组,那么对主题的每个条目进行搜索和替换,返回值也是一个数组。”

【讨论】:

    【解决方案2】:

    不,这是不可能的。不过,如果您使用的是 PHP 5.3,则可以执行以下操作:

    $data = array('foo bar baz');
    $data = array_map(function($value) { return str_replace('bar', 'xxx', $value); }, $data);
    print_r($data);
    

    输出:

    Array
    (
        [0] => foo xxx baz
    )
    

    【讨论】:

    • @mkilmanas,你是什么意思?投反对票的原因是什么(如果是你)?
    【解决方案3】:

    当然可以,您只需为回调函数提供array_map() 的正确输入即可。

    array_map(
        'str_replace',            // callback function (str_replace)
        array_fill(0, $num, ' '), // first argument    ($search)
        array_fill(0, $num, '-'), // second argument   ($replace)
        $myArr                    // third argument    ($subject)
    );
    

    但是对于问题中的特定示例,正如chiborg 所说,没有必要。 str_replace() 很乐意处理字符串数组。

    str_replace(' ', '-', $myArr);
    

    【讨论】:

      【解决方案4】:

      需要注意的是,如果str_replace 中使用的数组是多维的,str_replace 将不起作用。

      虽然这并不能直接回答使用 array_map 而不调用额外函数的问题,但如果决定您需要,此函数可能仍然有用代替 array_map 的第一个参数中的 str_replace在多维数组上使用array_map 和字符串替换。它的行为与使用str_replace 相同:

      function md_str_replace($find, $replace, $array) {
      /* Same result as using str_replace on an array, but does so recursively for multi-dimensional arrays */
      
      if (!is_array($array)) {
        /* Used ireplace so that searches can be case insensitive */
        return str_ireplace($find, $replace, $array);
      }
      
      $newArray = array();
      
      foreach ($array as $key => $value) {
        $newArray[$key] = md_str_replace($find, $replace, $value);
      }
      
      return $newArray;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-11
        • 2011-03-26
        • 2021-12-23
        • 2013-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多