Заполнение массива и его возврат поставьте внутрь функции dataLoad, иначе элементы массива останутся неопределенными. (Код AS работает асинхронно, у вас к моменту заполнения массива переменные s1 и прочие еще не определены). И массив объявите пораньше, например, в начале функции.
Добавлено через 11 минут

Код AS1/AS2:
function ReadPHP(news_number):Array {
// Загружаем данные из PHP
var sv:LoadVars = new LoadVars();
var rv:LoadVars = new LoadVars();
s1 = "";
s2 = "";
s3 = "";
ar = new Array();
rv.onLoad = dataLoad;
sv.sendAndLoad('http://www.eg.ru/read_top5.php?number=' + news_number, rv, 'POST');
//trace('read_top5.php?number=' + news_number);
function dataLoad(done:Boolean) {
if (done) {
//trace(rv.my_title);
//trace(rv.short_story);
s1 = rv.my_title;//Header
s2 = rv.short_story;//Short story
s3 = rv.category;//Category
ar.push(s1);//Header
ar.push(s2);//Short story
ar.push(s3);//Category
return ar;
}
}
}//ReadPHP
//Загружаем новости
//MyArr = new Array(3);
var Arr:Array = new Array();
Arr = ReadPHP(0);
news_header_01 = Arr[0];
news_short_story_01 = Arr[1];
news_category_01 = Arr[2];
Если что, то имейте ввиду - переменные, объявленные внутри функции с использованием var, видны только в ней и умирают после ее отработки.
Добавлено через 28 минут
И если уж по мелочам, то точки с запятыми в конце функций не нужны, так они объявляются явно, и не анонимные, через ссылку, как тут:

Код AS1/AS2:
rv.onLoad = dataLoad;