Difference between mysql_fetch_array and mysql_fetch_assoc

There is not so much difference between the mysql_fetch_array and mysql_fetch_assoc in the sense that both can fullfill your requirements but it depends on your need and ease of use. I prefer mysql_fetch_array because with it i can use both indexed value and associative value.

I will explain this difference with short example:
$sql = mysql_fetch_array(‘select name, address from tbl_customer’);
It means that you are getting answer directly into an array , and you dont need to know the field value of the elements to be outputed.
Just print the output as:

foreach($sql as $ans){
    echo $ans[0].' lives in '.$ans[1];
}
or 
foreach($sql as $ans){
    echo $ans['name'].' lives in '.$ans['address'];

}
mysql_fetch_assoc, you can output the result as $ans['name'] but not $ans[0] . What i want say is you need to know about the field name of the table. Ok here is the sample code:
foreach($sql as $ans){
    echo $ans['name'].' lives in '.$ans['address'];
}
But not
foreach($sql as $ans){
    echo $ans[0].' lives in '.$ans[1];

}

Which again relies upon your knowing what is coming out of the database, and in my opinion is better because
a) its easier to read, and
b) if you don't use OOP, it at least gets you thinking about and using OO notation.
mysql_fetch_assoc — Fetch a result row as an associative array
mysql_fetch_array — Fetch a result row as an associative
array, a numeric array, or both