Есть ли способ обнаружить круговые массивы в чистом PHP?

Я пытаюсь реализовать свою собственную функцию стиля сериализации / var_dump в PHP. Это кажется невозможным, если есть возможность круговых массивов (которые есть).

В последних версиях PHP var_dump, кажется, обнаруживает круговые массивы:

php > $a = array();
php > $a[] = &$a;
php > var_dump($a);
array(1) {
  [0]=>
  &array(1) {
    [0]=>
    *RECURSION*
  }
}

Как мне реализовать свой собственный метод сериализации в PHP, который может обнаруживать аналогично? Я не могу просто отслеживать, какие массивы я посетил, потому что строгое сравнение массивов в PHP возвращает true для разных массивов, содержащих одинаковые элементы, и сравнение круговых массивов в любом случае приводит к фатальной ошибке.

php > $b = array(1,2);
php > $c = array(1,2);
php > var_dump($b === $c);
bool(true)
php > $a = array();
php > $a[] = &$a;
php > var_dump($a === $a);
PHP Fatal error:  Nesting level too deep - recursive dependency? in php shell code on line 1

Я искал способ найти уникальный идентификатор (указатель) для массива, но я не могу его найти. spl_object_hash работает только с объектами, а не с массивами. Если я разыграю несколькоразные Все массивы объектов имеют одинаковое значение spl_object_hash (почему?).

РЕДАКТИРОВАТЬ:

Вызов print_r, var_dump или serialize для каждого массива, а затем использование какого-либо механизма для обнаружения присутствия рекурсии, обнаруженной этими методами, - кошмар алгоритмической сложности, и в принципе любое использование будет слишком медленным для практического использования на больших вложенных массивах.

ПРИНЯТО ОТВЕТ:

Я принял ответ ниже, который первым предложил временно изменить массив, чтобы увидеть, действительно ли он совпадает с другим массивом. Это отвечает на вопрос «как сравнить два массива на идентичность?» из которого обнаружение рекурсии тривиально.

Ответы на вопрос(4)

Ваш ответ на вопрос