Как читать csv, надеюсь, разберетесь. Какой-нибудь fgetcsv() в помощь.
А перебирать вложенными циклами. Число циклов — число столбцов.
Ну и вот вариант для перебора всех вариантов для любого количества строк и столбцов:
$arr = array(
array('желтые', 'зеленые','синие'),
array('длинные','короткие','узкие'),
array('штаны','шорты','трусы'));
function getVariants($arr) {
$variant = array();
$result = array();
$sizearr = sizeof($arr);
function recursiv($arr, $variant, $level, $result, $sizearr){
$level++;
if($level<$sizearr){
foreach ($arr[$level] as $val){
$variant[$level] = $val;
$result = recursiv($arr, $variant, $level, $result, $sizearr);
}
}else{
$result[] = $variant;
}
return $result;
}
$arrays = recursiv($arr, $variant, -1, $result, $sizearr);
$result = array();
foreach ($arrays as $str) {
$result[] = implode(' ', $str);
}
return $result;
}
print_r(getVariants($arr));