У меня есть устаревшее приложение, в котором я пытаюсь перенести изменения из старого в новое при генерации журнала изменений. Дела идут хорошо; однако, я продолжаю работать в «изменениях», которые меняют ничего. Покопавшись в этом, я обнаружил, что устаревший код использует массивы, а новый код использует объекты. Если бы они были сериализованы, я думал, что они будут одинаковыми. В конце концов, если они сбрасываются через print_r
, они идентичны. Но это не тот случай. Еще более поразительно, что объекты сохраняют целыми ключами даже после сериализации-несериализации на велосипеде.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