统一可变类型的数组元素

时间:2010-10-19 23:22:18

标签: php variable-types

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

所以我基本上有一些像

这样的代码
$key = md5(json_encode($data));

为每个事件生成一个唯一键。

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

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

1 个答案:

答案 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; 
}