2013-03-12 4 views
5

私は混合値の配列があります:あなたはそれがテキストとの両方の負および正のカンマが含まれて見ることができるようにPHP:(カンマ付き)数場合は、(ポイントで)右の番号形式に変換

$row = array('Unspecified risk','Yes','8','3','2','13','none','-1,49','-2,51','-1,46','-1,54'); -1,94 -1,55 

を - 番号。

数値を正しい数値形式に変換し、そのままテキスト値をそのまま残す必要があります。

今、私は値をループしています:私が調査してきましたが、適切な解決策を見つけることができません

foreach ($row as $value) { 
    // If $value is numeric, convert it to the 
    // right number format for use with MySQL (decimal(10,2)) 
    // If not, leave it be. 
} 

2つの関連する質問を。

誰もが実用的な例を提供してもらえますか?

答えて

6

正規表現を使用する必要はありません。

使用あなたが'.'ため','を交換して、数値を取得するためにintval()またはfloatval()機能を使用する必要があるとしてstr_replace()intval()またはfloatval()

例を使用した場合にも'.'を探し、決定するstrstr()を使用することができます。

$row = array('Unspecified risk', 'Yes', '8', '3', '2', '13', 'none', '-1,49', '-2,51', '-1,46', '-1,54'); 

    function toNumber($target){ 
     $switched = str_replace(',', '.', $target); 
     if(is_numeric($target)){ 
      return intval($target); 
     }elseif(is_numeric($switched)){ 
      return floatval($switched); 
     } else { 
      return $target; 
     } 
    } 

    $row = array_map('toNumber', $row); 

    var_dump($row); 

私たちは、コンマのは、国際表記フロートです。この方法でドットを交換するstr_replace()を使用しますたとえそれが文字列であっても、後でこの数値がis_numeric() <であるかどうかをチェックすることができます。この関数は、数値か整数か浮動小数点数などの文字列から検出するのですばらしいです。

我々はis_n数値がfloatまたはtextの整数であるかどうかを確認し、intval()またはfloatval()を使用して対応する値を返します(置換を適用しない値は、およびを切り替えた後に有効な数値として返されません)。それは数値としてtrueを返します)。

$row = array_map('toNumber', $row);を使用して変更をアレイに適用します。

利益のxD

+0

感謝をフォーマットします。しかし、テキスト値と数値を区別するにはどうすればよいですか? – maartenmachiels

+0

with is_numeric()、私の編集をチェック:D – aleation

+0

非常にエレガントなソリューション!あなたの努力をありがとうございます:それは魅力のように動作します。 – maartenmachiels

1
$row = array('Unspecified risk','Yes','8','3','2','13','none','-1,49','-2,51','-1,46','-1,54'); 
    foreach($row as $key => $var) { 
     if(strstr($var, ",") && !is_numeric($var)) { 
      $var1 = str_replace(",","", $var); 
      if(is_numeric($var1)) { 
       $decimal = strstr($var, ',', TRUE); 
       $digits = str_replace($decimal, "", $var1); 
       $finalValue = $digits * pow(10,$decimal); 
       $row[$key] = $finalValue; 
      } 
     } 
    } 
    echo "<pre>"; print_r($row); 

注:これはテストするために、PHP 5.3やPHP 5.3+

+1

checkout floatval()PHPドキュメントでは、str_replace()の後にfloatval($ var1)を使用すると、値が直接取得されます。あなたは以下の4つの操作をする必要はありません – aleation

+1

あなたの答えをありがとう! – maartenmachiels

0

使用is_numericのために働くだろうとnumber_formatが答えるため

foreach ($row as &$value) { 
    $number = str_replace(',','.'); 
    if(is_numeric($number)) 
     $value = number_format($number, 2, '.', ''); 
} 
unset($value); 
関連する問題