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;
}
- 您需要return新值
- 回调只接受值,所以只有一个参数
此外,我看不出有任何理由在替换之前检查 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);
我正在尝试用连字符替换数组值的间距,然后重新收集同一数组的所有值,但在空格中使用连字符。
输入:
$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;
}
- 您需要return新值
- 回调只接受值,所以只有一个参数
此外,我看不出有任何理由在替换之前检查 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);