PHP:`strcmp`相同对象和数组的序列化失败

PHP:`strcmp`相同对象和数组的序列化失败,php,arrays,object,serialization,strcmp,Php,Arrays,Object,Serialization,Strcmp,我有一个遗留应用程序,我试图将更改从旧迁移到新,同时生成更改日志。事情进展顺利;然而,我不断地遇到“变化”,而这些变化什么也没有改变。深入研究之后,我发现遗留代码使用数组,而新代码使用对象。如果连载,我认为它们是相同的。毕竟,如果它们通过print\r转储,它们是相同的。但事实并非如此。更令人惊讶的是,即使在序列化-取消序列化循环之后,对象仍保留其整数键 请求是:如何显示这两个字符串是相同的,因为它们生成的对象/数组是相同的,只需键入键即可 <?php $v3v = 'a:2:{s:9

我有一个遗留应用程序,我试图将更改从旧迁移到新,同时生成更改日志。事情进展顺利;然而,我不断地遇到“变化”,而这些变化什么也没有改变。深入研究之后,我发现遗留代码使用数组,而新代码使用对象。如果连载,我认为它们是相同的。毕竟,如果它们通过
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));
什么?您是如何记住整数键的?“


我怎样才能让您停止呢???

您可以使用
数组_diff
而不是
strcmp
。您可以尝试以下方法-

array\u diff($v3,$v4)
将返回空的
array
,如果它们是相同的


区别在于
s:1
i:1
。首先是
string
,其次是
integer
是的,是的,我意识到
strcmp
与您指出的完全一样。问题是,既然在应用程序中两个序列化值都产生相同的输出,我们如何识别在本例中,这两个构造是相同的,只需键入即可。
$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";}
  $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);
  echo empty(array_diff($v3, $v4)) ? 'Identical' : 'Not Identical';