统一变量类型的数组元素
问题描述:
经过数小时的调试后,我在其中一个脚本中发现错误。为了将不同的事件类型保存在数据库中,我为每个可用于识别事件的事件提供了一组唯一的数据。统一变量类型的数组元素
所以我基本都喜欢
$key = md5(json_encode($data));
一些代码来生成每个事件的唯一关键。
现在,在某些情况下,$data
数组中的值是整数,有时是字符串(取决于数据库或URL的来源)。这导致json_encode()
的输出彼此不同 - 一旦包括引号,则一次不包括引号。
有没有人知道一种方法来“统一”$data
数组中的变量类型?这可能意味着将所有只包含整数值的字符串转换为整数。在使用json_encode()
时,还有其他事情需要注意吗?
答
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;
}
在一个侧面说明,大多数事件在我们的数据库中(当然除了创建不正确的)是现在基于字符串,因此将整数转换为字符串可能会更好,而不是相反。 – Franz 2010-10-19 23:35:02
我在想,如果你所需要的只是一个一致的哈希,但我不确定你在使用它... – tobyodavies 2010-10-19 23:53:05
是的,我需要一致的哈希,就是这样。 – Franz 2010-10-20 14:12:17