<?php

$recursive = array(42);
$recursive['recursive'] = &$recursive;

$nonrec = array(42);
$nonrec[] = $nonrec; // not recursive, this is a static copy of the array


echo (int)is_recursive($recursive)."\n";
echo (int)is_recursive($nonrec)."\n";


function is_recursive(array &$array) {
    static $uniqueObject;
    if (!$uniqueObject) {
        $uniqueObject = new stdClass;
    }

    foreach ($array as &$item) {
        if (!is_array($item)) {
            continue;
        }

        $item[] = $uniqueObject;
        $isRecursive = end($array) === $uniqueObject;
        array_pop($item);
        if ($isRecursive) {
            return true;
        }
    }

    return false;
}

