Есть много проблем с вашим скриптом. Например:
- вы не используете синтаксический анализатор XML и просто обрабатываете его как строку (неэффективно, в основном неправильно) - используйте, например, SimpleXML ,
- есть много строк вашего кода , которые не нужны , потому что не меняйте результаты вашего кода - пример решения ниже,
- написать свой код согласованным образом (например, использовать отступы, использовать те же обозначения для условных предложений) - на самом деле не влияет на скорость выполнения, но поможет вам в обслуживании кода,
Проблема лежит, например, здесь:
if (strpos($buffer, "country_id")>0) ($country_id[$n]=delteg($buffer));
if (strpos($buffer, "point_name")>0) ($point_name[$n]=delteg($buffer));
if (strpos($buffer, "point_name_trim")>0) ($point_name_trim[$n]=delteg($buffer));
if (strpos($buffer, "point_name2")>0) ($point_name2[$n]=delteg($buffer));
if (strpos($buffer, "point_timestamp")>0) ($point_timestamp[$n]=delteg($buffer));
if (strpos($buffer, "gmt_add")>0) ($gmt_add[$n]=delteg($buffer));
if (strpos($buffer, "point_date")>0) ($point_date[$n]=delteg($buffer));
if (strpos($buffer, "point_date_time")>0) ($point_date_time[$n]=delteg($buffer));
if (strpos($buffer, "time_step")>0) ($time_step[$n]=delteg($buffer));
if (strpos($buffer, "datetime")>0) ($datetime[$n]=delteg($buffer));
if (strpos($buffer, "G")>0) ($G[$n]=delteg($buffer));
if (strpos($buffer, "HHii")>0) ($HHii[$n]=delteg($buffer));
if (strpos($buffer, "cloud_cover")>0) ($cloud_cover[$n]=delteg($buffer));
if (strpos($buffer, "precipitation")>0) ($precipitation[$n]=delteg($buffer));
if (strpos($buffer, "pressure")>0) ($pressure[$n]=delteg($buffer));
if (strpos($buffer, "temperature")>0) ($temperature[$n]=delteg($buffer));
if (strpos($buffer, "humidity")>0) ($humidity[$n]=delteg($buffer));
if (strpos($buffer, "wind_direction")>0) ($wind_direction[$n]=delteg($buffer));
if (strpos($buffer, "wind_velocity")>0) ($wind_velocity[$n]=delteg($buffer));
if (strpos($buffer, "falls")>0) ($falls[$n]=delteg($buffer));
if (strpos($buffer, "drops")>0) :($drops[$n]=delteg($buffer));
$n++;
endif;
где вам действительно нужны только первые две строки:
if (strpos($buffer, "country_id")>0) ($country_id[$n]=delteg($buffer));
if (strpos($buffer, "point_name")>0) ($point_name[$n]=delteg($buffer));
потому что позже вы используете только значения, сгенерированные ими.