簡體   English   中英

PHP:相同對象和數組的“ strcmp”序列化失敗

[英]PHP: `strcmp` serialization of identical object and array failing

我有一個舊版應用程序,我試圖在將更改從舊遷移到新的同時生成更改日志。 事情進展順利; 但是,我不斷遇到“改變”, 什么也沒有改變。 深入研究之后,我發現舊代碼正在使用數組,而新代碼正在使用對象。 如果序列化,我認為它們將是相同的。 畢竟,如果它們是通過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";}

以及我如何讓您停下來???

您可以使用array_diff代替strcmp 你可以試試這個-

  $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';

如果它們相同array_diff($v3, $v4)將返回空array

工作代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM