由于MYSQL的"SELECT"将整数和浮点数选为字符串,而我需要从JS获取的每个响应都符合正确的数据模型 -
- 1 不是 "1",
- 53.2 不是 "53.2",
我创建了这个递归函数,可以处理混合类型 - 数组/对象:
private function cast_number(&$mixed) {
if(is_array($mixed)) {
foreach ($mixed as $key => $val)
if (is_numeric($val))
$mixed[$key] = (double)$val;
else if (is_array($val) || is_object($val))
$mixed[$key] = $this->cast_number($val);
} else if(is_object($mixed)) {
foreach ($mixed as $key => $val)
if (is_numeric($val))
$mixed->$key = (double)$val;
else if (is_array($val) || is_object($val))
$mixed->$key = $this->cast_number($val);
}
return $mixed;
}
这是一个相当简单的函数 - 如果是数字,就转换成双精度浮点型,如果是数组或对象,则递归处理。
所有内容都已经放在了正确的位置。
但有两个问题: - 在6MB大小的数据中,大多数数字表示为字符串,需要0.5秒左右 - 在200MB的数据上(是的,我需要它,请不要关注这一点),几分钟后(通常是几秒钟),它会失败并显示需要超过4GB的内存...
- 如何改进此函数?(速度、内存)
- 为什么它需要这么长时间?即使json_encode这样的更大的函数花费的时间也要少得多...
$mixed[$key] = 0 + $val;
。 - Ivan GabrieleINT
可以轻松地接受"123"
。PHP在大多数情况下会自动将字符串转换为数字。请提供一个简短的代码片段来说明这个问题。 - Rick James