Weź posprawdzaj czy array_fill'e poprawnie generują tablice (też je print'em

) Na koniec print'em array_mapa sprawdź. Coś gdzieś musi być. Może niepoprawna ilość jest, czy coś. Sprawdzę jeszcze z Twoimi danymi, specjalnie sobie dopiszę funkcję

EDIT: Dobra sprawdziłem - array map zwraca tablicę numerowaną, nie asocjacyjną. Kod jakiego użyłem:
<?php
class Foo{
private
$i = 0,
array('id' => 2, 'description' => 'Szwagierczak i jego maluch', 'link' => 'http://www.youtube.com/watch?v=O9Wckpx9wUg', 'who' => 2
), array('id' => 5, 'description' => 'Najlepszy fragment "Dnia Świra"', 'link' => 'http://www.youtube.com/watch?v=sgTafCVlhA4', 'who' => 2
), array('id' => 12, 'description' => 'ś', 'link' => 'ć', 'who' => 2
), array('id' => 13, 'description' => 'USPDF 2009 Championship', 'link' => 'http://www.youtube.com/watch?v=pWMrfggZzo0', 'who' => 2
) );
public function fetch(){
$this->i++;
return $this->tablica[$this->i-1];
}
}
$foo = new Foo;
while ($row_collection = $foo->fetch()) {
}
?>
Takie wywołanie zwraca:
Kod
Array ( [0] => Array ( [0] => 2 [1] => Szwagierczak i jego maluch [2] => http://www.youtube.com/watch?v=O9Wckpx9wUg [3] => 2 ) [1] => Array ( [0] => 5 [1] => Najlepszy fragment "Dnia Świra" [2] => http://www.youtube.com/watch?v=sgTafCVlhA4 [3] => 2 ) [2] => Array ( [0] => 12 [1] => ś [2] => ć [3] => 2 ) [3] => Array ( [0] => 13 [1] => USPDF 2009 Championship [2] => http://www.youtube.com/watch?v=pWMrfggZzo0 [3] => 2 ) )
Klasę stworzyłem dla wygody

Co do foreach'a w pętli - oczywiście, że można. W takim wypadku otrzymasz tablicę asocjacyjną, czyli taką jaką być potrzebował