2017-01-13 3 views
1

JSONなしでJSON_NUMERIC_CHECKの効果を得ることはできますか?JSONなしでJSON_NUMERIC_CHECKの効果を得ることはできますか?

つまり、数値ストリングをintまたはfloatに強制的に置き換えます。 JSON_NUMERIC_CHECKと

例:

<?php 

// some input from somewhre 
$data = explode(',', 'abc,7,3.14'); 

echo "Before:"; var_dump($data); 

$data = json_decode(json_encode($data, JSON_NUMERIC_CHECK), TRUE); 

echo "After:"; var_dump($data); 

しかし、私はJSONに変換geussとバックが遅い、同じ結果を得るために他のいくつかの方法がありますか?

答えて

0

array_map()をコールバックで使用できます。

$data = explode(',', 'abc,7,3.14'); 
$re = array_map(function(&$a) { 
    return ctype_digit($a) ? intval($a) : $a; 
}, $data); 
var_dump($re); 

https://eval.in/715641

+0

a:3.14はfloatに変換されず、b:-1は変換されず、Recursive –

1

あなたstring秒以上のループをすることができますし、次のコードを使用してintまたはfloatに任意の数値をキャスト:これは役立ちます:)

続きを

/** 
* Normalize an object, array or string by casting all 
* numeric strings it contains to numeric values. 
* 
* @param array|object|string $data 
* @return mixed 
*/ 
function normalize($data) { 
    if (is_array($data)) 
     return array_map('normalize', $data); 
    if (is_object($data)) 
     return (object) normalize(get_object_vars($data)); 
    return is_numeric($data) ? $data + 0 : $data; 
} 

$data = "15,2.35,foo"; 

$data = normalize(explode(',', $data)); 
// => [15, 2.35, 'foo'] 

・ホープ効率的な方法

+0

いいえ、Recrusiveではありません –

+0

現在はどうなっていますか? – webNeat

+0

はもっとよく見えますが、もしarray_mapを使うつもりなら、おそらくarray_walk_recursiveをもっとintrestingすることができますが、あなたの例はオブジェクトを扱います、それではもっと私のjson-exampleは:-) –

関連する問題