<?php

function transform_impl($arr, $obj, &$res) {
	$res = array();
	foreach ($arr as $item) {
		$children = @$item['children'];
		unset($item['children']);
		$res[] = array_merge($obj, $item);
		if ($children) {
			transform_impl($children, array_merge($obj, $item), $res);
		}
	}
}

function transform($arr) {
	$res = array();
	transform_impl($arr, array(), $res);
	return $res;
}

print_r(transform(array(
	array("category" => "vegetable", "type" => "garden", "children" =>
		array(array("name" => "cabbage"), array("name" => "eggplant"))
	),
	array("category" => "fruit", "type" => "citrus")
)));