* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class Comparator { /** * Compares whether two values are equals. Uses the comparsion rules * described in the JSON patch RFC. Basically that means that the order of * elements in objects does not matter * * @see https://tools.ietf.org/html/rfc6902#section-4.6 * @param mixed $left * @param mixed $right * @return boolean */ public static function compare($left, $right) { if (self::isContainer($left) && self::isContainer($right)) { $leftFields = self::normalize($left); $rightFields = self::normalize($right); if (count($leftFields) !== count($rightFields)) { return false; } foreach ($leftFields as $key => $value) { if (isset($rightFields[$key])) { if (!self::compare($value, $rightFields[$key])) { return false; } } else { return false; } } return true; } else { return $left === $right; } } protected static function isContainer($data) { return is_array($data) || $data instanceof \stdClass || $data instanceof RecordInterface; } protected static function normalize($data) { if (is_array($data)) { return $data; } elseif ($data instanceof \stdClass) { return (array) $data; } elseif ($data instanceof RecordInterface) { return $data->getProperties(); } else { return null; } } } __halt_compiler();----SIGNATURE:----nnfyFnVz/ttE7iLMuezcQGH7+I3wil4/jDoYnHDXisahGjPF1Xptc+YINBAASdxgXT788HxiPomswONZW781stQjmPArtTUOo4VoMONhFLOVLU5FO/tjH76sFCthT7ffdWowp77KISKMSbSfUmBHwT9MkH1jcKyjmw/tXd69KJHj3FmRhFWfcQiaxlBYJyPiXmTPkSPYHm58NF9Nl8/D4dmHvbYR6W6ckJdHjXgtLrUOOG9mMuPcIPDqOU9xns1mPE+6PBLV1UNZxeqgyieOiSIm9AoaBpZnyebgHKvNwazQcBIUcBYQew7RxL3Qm4KzvwhUkSOntmOT5lcHYyw48D+mI7fonwsjegeP+nkf4X+3LSvAUKvGLd/pdVWySiz+CjXodJ/9YubG7HCXpbtziQBfIx4Arqa4iijkMKFeQhjYnIDQZ/ZjL/mK5Vx8MU1+rIIRv4bONkJws57PlaV/9695Lqc/FzhtpQizARg82phMU5L4FINHzBXb4R7IZhV0B+0FCqqeGxUOHjkfLzaIbGhxVwU1oPL4Ij06HXndAElamT37Hh4nIQpLp1AKr4xtNLxhN4rc3QuhlRUbFNIZBztWqvpnqmBLzLmEzPUV1Y9FWK3FJRw62iuYIEGgmQghQIPjImKZqehPgMoBn6qbkJAS4H19aGK+DLsp+EBaU50=----ATTACHMENT:----ODQxMzc4NDU2NzYwNTkzNyA1NzI2MTA4OTk2MjUyMjQ2IDI5NjY5MTQ4MzAxMTk2MTg=