我可以在没有JSON的情况下获得JSON_NUMERIC_CHECK的效果吗?
即。将数字字符串重新替换为整数或浮点数。
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并且返回的速度很慢,还有其他方法可以获得相同的结果吗?
答案 0 :(得分: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']
希望这会有所帮助:)
/**
* Normalize an string or object by casting all
* numeric strings it contains to numeric values.
* Note that it changes the variable directly
* instead of returning a copy.
*
* @param object|string $data
* @return void
*/
function normalizeItem(&$data) {
if (is_object($data)) {
$data = get_object_vars($data);
normalize($data);
$data = (object) $data;
} else {
$data = is_numeric($data) ? $data + 0 : $data;
}
}
/**
* Applies normalizeItem to an array recursively.
*
* @param array &$list
* @return bool
*/
function normalize(&$list) {
return array_walk_recursive($list, 'normalizeItem');
}
答案 1 :(得分: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);