统一变量类型的数组元素

统一变量类型的数组元素

问题描述:

经过数小时的调试后,我在其中一个脚本中发现错误。为了将不同的事件类型保存在数据库中,我为每个可用于识别事件的事件提供了一组唯一的数据。统一变量类型的数组元素

所以我基本都喜欢

$key = md5(json_encode($data)); 

一些代码来生成每个事件的唯一关键。

现在,在某些情况下,$data数组中的值是整数,有时是字符串(取决于数据库或URL的来源)。这导致json_encode()的输出彼此不同 - 一旦包括引号,则一次不包括引号。

有没有人知道一种方法来“统一”$data数组中的变量类型?这可能意味着将所有只包含整数值的字符串转换为整数。在使用json_encode()时,还有其他事情需要注意吗?

+1

在一个侧面说明,大多数事件在我们的数据库中(当然除了创建不正确的)是现在基于字符串,因此将整数转换为字符串可能会更好,而不是相反。 – Franz 2010-10-19 23:35:02

+0

我在想,如果你所需要的只是一个一致的哈希,但我不确定你在使用它... – tobyodavies 2010-10-19 23:53:05

+0

是的,我需要一致的哈希,就是这样。 – Franz 2010-10-20 14:12:17

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; 
} 
+0

我喜欢编辑。我会报告回来,谢谢。 – Franz 2010-10-20 14:11:01

+0

但是为什么不'array_walk_recursive'? – Franz 2010-10-20 14:11:26

+0

好的,我用'array_map'(递归是不需要的)与一个简单的int-to-string转换函数。感谢你的帮助。 – Franz 2010-10-20 21:51:37