I assume $cat_array is a two dimensional array.
The foreach loop iterates across the array, each time through it sets variable $row to one entry in $cat_array
Since $row now contains an array (based on my first assumption that $cat_array is two dimensional) the code can index into $row (it apparently has two entries, key values are "catid" and "catname", if you don't know what an associative array is you need to do some more background reading).
It builds two strings and stores them in variables $url and $title.
It echos an HTML list item tag "<li>" (obviously building a list on the output page).
It calls a function do_html_url (must be a user defined function, probably included in the page you are looking at). Presumably it echos the list item tag contents from there.
This is pretty sloppy code, there's no need for the $url and $title variables at all. And the <li> tags should either be echoed inside do_html_url or not, it looks like the end tag is inside (or missing from here).