8

私は混合値の配列を持っています:

$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 つの質問を調査しましたが、適切な解決策が見つかりません。

誰でも実用的な例を提供できますか?

4

4 に答える 4

10

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

を astr_replace()に置き換えるために必要に応じて使用し、または関数を使用して数値を取得します。を使用して を探し、またはを使用するかどうかを決定することもできます。',''.'intval()floatval()strstr()'.'intval()floatval()

例:

$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_numeric を使用して、値が整数の浮動小数点数かテキストかを確認し、or を使用して対応する値を返しますintval()(floatval()置換が適用されていない値は、有効な数値として返されず、 , and を切り替えた後でのみ、数値として true を返します) .

$row = array_map('toNumber', $row);変更を配列に適用するために使用します。

利益 xD

于 2013-03-12T13:54:21.703 に答える
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+ で機能します。

于 2013-03-12T14:17:32.310 に答える
0

is_numericテストおよびnumber_formatフォーマットに使用します。

foreach ($row as &$value) {
    $number = str_replace(',', '.', $value);
    if (is_numeric($number)) {
        $value = number_format($number, 2, '.', '');
    }
}
unset($value);
于 2013-03-12T14:39:17.143 に答える