一つづつstr_replaceで変換を考えましたが、
str_replace("Clear","晴れ", $main);
ここではswitch文を使ってみます。
foreach($list as $value){
$main = $value["weather"][0]["main"];
switch($main){
case 'Clear':
echo "晴れ<img src=\"icon01.png\"><br>";
break;
case 'Clouds':
echo "曇<img src=\"icon02.png\"><br>";
break;
case 'Rain':
echo "雨<img src=\"icon03.png\"><br>";
break;
default:
echo $main;
}
}

functionにします。
function convert($main){
switch($main){
case 'Clear':
return "晴れ<img src=\"icon01.png\">";
break;
case 'Clouds':
return "曇<img src=\"icon02.png\">";
break;
case 'Rain':
return "雨<img src=\"icon03.png\">";
break;
default:
echo $main;
}
}
悪くないです。良くもないが。。

descriptionも関数を作ってみます。
function convert2($description){
switch($description){
case 'clear sky':
return "晴天<br>";
break;
case 'scattered clouds':
return "きれぎれに浮かんでいる雲";
break;
case 'broken clouds':
return "ちぎれた雲<br>";
break;
case 'few clouds':
return "少しの雲<br>";
break;
case 'light rain':
return "小雨<br>";
break;
default:
echo $description;
}
}
