PHP array_map 不返回结果数组

PHP array_map not returning resultant array

我正在尝试用连字符替换数组值的间距,然后重新收集同一数组的所有值,但在空格中使用连字符。

输入:

$gFontsList = array("-1", "Agency FB", "28", "Aharoni Bold", "Bookshelf Symbol", "100", "Bookshelf Symbol", "111", "Browallia New Bol");

function toReplaceSpacing($gFontsListValues, $gFontsListIndex){
   if (gettype($gFontsListValues) === 'string'){
      if(preg_match('/ /',$gFontsListValues)){
        $gFontsListValues = str_replace(' ','-',$gFontsListValues);
        $gFontsChoiceOrder[] = $gFontsListValues;
      }
    } else {
      $gFontsChoiceOrder[] = $gFontsListValues;
    }
}
$gFontsChoiceOrder = array_map('toReplaceSpacing',$gFontsList);
print_r($gFontsChoiceOrder);

如果我打印它只是 NULL。我不知道为什么我没有得到结果数组?

两期:

function toReplaceSpacing($gFontsListValues){
   if (gettype($gFontsListValues) === 'string'){
        $gFontsListValues = str_replace(' ','-',$gFontsListValues);
   }
   return $gFontsListValues;
}
  1. 您需要return新值
  2. 回调只接受值,所以只有一个参数

此外,我看不出有任何理由在替换之前检查 space(尤其是使用正则表达式),这会使代码变长。

正如 billyonecan 在评论中指出的那样,可以使用匿名函数来完成,但此版本不检查字符串,因此可能导致数组、对象等出现问题:

$gFontsChoiceOrder = array_map(function($v) {
                                   return str_replace(' ', '-', $v);
                               }, $gFontsList);

为了将来参考,您可以使用 array_walk() 和参考修改原始数组:

function toReplaceSpacing(&$gFontsListValues){
   if (gettype($gFontsListValues) === 'string'){
        $gFontsListValues = str_replace(' ','-',$gFontsListValues);
   }
}
array_walk($gFontsList, 'toReplaceSpacing');

删除第二个参数 $gFontsListIndex,然后 return 一个值 gFontsListValues

$gFontsList = array("-1", "Agency FB", "28", "Aharoni Bold", "Bookshelf Symbol", "100", "Bookshelf Symbol", "111", "Browallia New Bol");

function toReplaceSpacing($gFontsListValues){

   $gFontsChoiceOrder = array();

   if (gettype($gFontsListValues) === 'string'){

      if(preg_match('/ /',$gFontsListValues)){

        $gFontsListValues = str_replace(' ','-',$gFontsListValues);
      }
   }

   return $gFontsListValues;
}

$gFontsChoiceOrder = array_map('toReplaceSpacing',$gFontsList);
print_r($gFontsChoiceOrder);