3v4l.org

run code in 300+ PHP versions simultaneously
<?php class DebugHelper { public function mapShallow($value, int $maxDepth, &$seenObjects = []) { if (is_object($value)) { $oid = spl_object_id($value); $className = get_class($value) . '#' . $oid; if ($seenObjects[$oid] ?? false) { return '**recursive class: ' . $className . '**'; } $seenObjects[$oid] = true; if ($maxDepth <= 0) { return '**class: ' . $className . '**'; } $value = array_merge(['**class**' => $className], (array) $value); } elseif (!is_array($value)) { return $value; } if ($maxDepth <= 0) { return '**array of size: ' . count($value) . '**'; } $res = []; $unseenObjects = []; foreach ($value as $k => $v) { if (is_object($v)) { $oid = spl_object_id($v); if (!($seenObjects[$oid] ?? false)) { $unseenObjects[$k] = true; } } $res[$k] = $this->mapShallow($v, -1, $seenObjects); } foreach ($value as $k => $v) { if (!is_object($v) && !is_array($v)) { continue; } $seenObjects2 = $seenObjects; if (is_object($v) && ($unseenObjects[$k] ?? false)) { unset($seenObjects2[spl_object_id($v)]); } $res[$k] = $this->mapShallow($v, $maxDepth - 1, $seenObjects2); } return $res; } } $dt = new \DateTime('2000-02-20 10:00'); $arr = [ 'foo', [1, 2, [3]], [$dt], $dt, ]; print_r((new DebugHelper())->mapShallow($arr, 2));
Output for git.master_jit, git.master, rfc.property-hooks
Array ( [0] => foo [1] => Array ( [0] => 1 [1] => 2 [2] => **array of size: 1** ) [2] => Array ( [0] => **recursive class: DateTime#1** ) [3] => Array ( [**class**] => DateTime#1 [date] => 2000-02-20 10:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) )

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
71.53 ms | 406 KiB | 5 Q