2017-06-08 3 views
-1

配列値のスペーシングをハイフンで置き換えようとしていて、同じ配列のすべての値をスペースでハイフンで戻して戻そうとしています。PHP array_map結果配列が返されない

INPUT:

$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だ印刷する場合。なぜ私は結果の配列を取得していないのですか?

+0

はtoReplaceSpacing'は私も '$ gFontsChoiceOrder'が、ノー結果を返す試みた新しい' $ gFontsListValues' – Deadooshka

+0

を返す '仮定しました。 –

+0

関数は何も返しません。あなたのコードがすべてハイフンで置き換えられているのを見ることができます。この場合、 '$ gFontsChoiceOrder = array_map(function($ v){return str_replace( ''、 ' - '、$ v);} 、$ gFontsList); ' – billyonecan

答えて

0

は、第2パラメータ$gFontsListIndexを削除してからちょうど値gFontsListValuesを返す:参照、あなたはarray_walk()と元の配列と参照を変更することができます。

$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); 
1

2つの問題:

function toReplaceSpacing($gFontsListValues){ 
    if (gettype($gFontsListValues) === 'string'){ 
     $gFontsListValues = str_replace(' ','-',$gFontsListValues); 
    } 
    return $gFontsListValues; 
} 
  1. あなたは、コールバックが唯一のもそう一つだけの引数

、値をとり、私が表示されていない新しい価値

  • を返却する必要があります置き換える前にスペースを(特に正規表現を使って)チェックする理由があれば、コードが長くなります。将来のために

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

    billyonecanとして

    は、それが匿名関数で行うことができますが、文字列をチェックしません。このバージョンはそう配列、オブジェクト、などの問題を引き起こす可能性があります、コメントで指摘します

    function toReplaceSpacing(&$gFontsListValues){ 
        if (gettype($gFontsListValues) === 'string'){ 
         $gFontsListValues = str_replace(' ','-',$gFontsListValues); 
        } 
    } 
    array_walk($gFontsList, 'toReplaceSpacing'); 
    
  • 関連する問題