【发布时间】:2017-07-06 13:17:29
【问题描述】:
我有一个旧版应用程序,我正在尝试将更改从旧版迁移到新版,同时生成更改日志。事情进展顺利;然而,我不断遇到“改变”,什么都没有。深入研究后,我发现遗留代码使用数组,而新代码使用对象。如果序列化,我认为它们将是相同的。毕竟,如果它们是通过print_r 转储的,它们是相同的。但事实并非如此。更令人震惊的是,即使在序列化-反序列化循环之后,对象保留它们的整数键。
请求是:我如何显示这两个字符串是相同的,因为它们生成的对象/数组是相同的,除了键输入。
<?php
$v3v = 'a:2:{s:9:"lastindex";s:1:"1";i:1;s:1:"1";}';
$v4v = 'a:2:{s:9:"lastindex";i:1;i:1;s:1:"1";}';
$v3 = unserialize($v3v);
$v4 = unserialize($v4v);
die('<pre>'.print_r($v3,true).' '.print_r($v4,true));
输出(相同):
Array
(
[lastindex] => 1
[1] => 1
)
Array
(
[lastindex] => 1
[1] => 1
)
让我们现在让它们“起死回生”:
$v3v = serialize($v3);
$v4v = serialize($v4);
die('<pre>'.print_r($v3v,true).PHP_EOL.print_r($v4v,true));
哇?你是怎么记住你的整数键的?”
a:2:{s:9:"lastindex";s:1:"1";i:1;s:1:"1";}
a:2:{s:9:"lastindex";i:1;i:1;s:1:"1";}
我怎样才能让你停下来???
【问题讨论】:
-
区别在于
s:1和i:1。第一个是string,第二个是integer -
是的,是的,我意识到
strcmp在您指出的确切内容上失败了。问题是,因为在应用程序中,两个序列化的值都产生相同的输出,我们如何才能在这种情况下识别出这两个结构除了打字之外是相同的。
标签: php arrays object serialization strcmp