A slight amendment to Matt's awesome print_r_reverse function (Thank You, a life-saver - data recovery :-) . If the output is copied from a Windows system, the end of lines may include the return character "\r" and so the scalar (string) elements will include a trailing "\r" character that isn't suppose to be there. To resolve, replace the first line in the function with...<?php $lines = preg_split('#\r?\n#', trim($in)); ?>This will work for both cases (Linux and Windows).I include the entire function below for completeness, but all credit to Matt, the original author, Thank You.<?phpfunction print_r_reverse($in) { $lines = preg_split('#\r?\n#', trim($in)); if (trim($lines[0]) != 'Array') { return $in; } else { if (preg_match("/(\s{5,})\(/", $lines[1], $match)) { $spaces = $match[1]; $spaces_length = strlen($spaces); $lines_total = count($lines); for ($i = 0; $i < $lines_total; $i++) { if (substr($lines[$i], 0, $spaces_length) == $spaces) { $lines[$i] = substr($lines[$i], $spaces_length); } } } array_shift($lines); array_shift($lines); array_pop($lines); $in = implode("\n", $lines); preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $in, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); $pos = array(); $previous_key = ''; $in_length = strlen($in); foreach ($matches as $match) { $key = $match[1][0]; $start = $match[0][1] + strlen($match[0][0]); $pos[$key] = array($start, $in_length); if ($previous_key != '') $pos[$previous_key][1] = $match[0][1] - 1; $previous_key = $key; } $ret = array(); foreach ($pos as $key => $where) { $ret[$key] = print_r_reverse(substr($in, $where[0], $where[1] - $where[0])); } return $ret; }}?>