我有一個遺留應用程序,我試圖將更改從舊遷移到新的過程中,同時生成更改日誌。事情進展順利;然而,我不斷遇到「變化」,沒有變化。深入研究之後,我發現遺留代碼使用數組,新代碼使用對象。如果序列化,我認爲它們是相同的。畢竟,如果他們通過print_r
傾銷,他們是相同的。但事實並非如此。更令人震驚的是,對象保留它們的整數鍵,即使在serialize-unserialize循環它們之後。PHP:相同的對象和陣列失敗的`strcmp`序列化
請求是:我怎麼能顯示這兩個字符串是相同的,因爲它們的結果對象/數組是相同的除了鍵入。
<?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));
whaaa?你怎麼記得你的整數鑰匙?」
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'對於你指出的確切的東西是失敗的。問題是,因爲在應用程序中,兩個序列化的值都會產生相同的輸出,所以在這種情況下我們怎麼能認識到這兩個構造是相同的,除了打字。 – WEBjuju