PHP: `strcmp`, сериализация идентичного объекта и массива не удалась

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

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";}

и как я могу заставить тебя остановиться ???

0

Решение

Ты можешь использовать 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 если они идентичны.

Рабочий код

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector