经过数小时的调试,我在其中一个脚本中发现了一个错误。为了在数据库中保存不同的事件类型,我为每个事件提供了一组唯一数据,可用于标识事件。
所以我基本上有一些像
这样的代码$key = md5(json_encode($data));
为每个事件生成一个唯一键。
现在,在某些情况下,$data
数组中的值是一个整数,有时是一个字符串(取决于它来自何处 - 数据库或URL)。这导致json_encode()
的输出彼此不同 - 一旦包括引号,一旦不包括引号。
有人知道在$data
数组中“统一”变量类型的方法吗?这可能意味着将仅包含整数值的所有字符串转换为整数。使用json_encode()
时需要注意的其他事项吗?
答案 0 :(得分:2)
array_walk_recursive
结合了您编写的maybe_intval
效果函数,该函数执行您在单个元素上讨论的转换。
编辑:仔细阅读array_walk_recursive
的文档后,您实际上想要编写自己的递归函数
function to_json($obj){
if(is_object($obj))
$obj=(array)$obj;
if(is_array($obj))
return array_map('to_json',$obj);
return "$obj"; // or return is_int($obj)?intval($obj):$obj;
}