@mende11eev

Как с помощью php перебрать все сочетания слов из разных колонок csv?

1)В наличии csv файл и 3 колонки со словами ( либо 3 txt файла с разными словами)
например
joxi.ru/CiTNU4wyTJCWLqD9Aig
нужно собрать все возможные вариант, в отдельный файл. Пример: зеленые длинные штаны, красные длинные штаны.... зеленые короткие штаны.... зеленые длинные шорты... и тд, путем перебора всех строк всех столбцов
Спасибо первая часть решена, и все работает.

2)Впервой части было смешивание по порядку т.е. в результат смешивания = одно слово с 1й колонки+одно слово со 2й колонки+одно слово с 3й колонки

а как добиться большего количества результатов, если смешивать не по порядку а в во всевозможных вариациях. т.е.
результат смещивания=одно слово с 2й кол.+одно слово с 3й колонки+ одно слово с 1й колонки
результат смешивания=одно слово с 3й кол.+ одно слово с 1й колонки+одно слово с 2й колонки
ну и тд, во всевозмоэных вариациях размещения слов в результате смешивания
  • Вопрос задан
  • 3532 просмотра
Пригласить эксперта
Ответы на вопрос 4
Как читать 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));
Ответ написан
Комментировать
lexxpavlov
@lexxpavlov
Программист, преподаватель
сначала помещаем всё в три массива, и потом в тройном вложенном цикле проходим все комбинации.
$colors = array('желтые', 'зеленые','синие');
$lengths= array('длинные','короткие','узкие');
$types = array('штаны','шорты','трусы');
$strings = array();
for ($i=0; $i<count($colors); $i++) {
    for ($j=0; $j<count($lengths); $j++) {
        for ($k=0; $k<count($types); $k++) {
            $strings[] = "$colors[$i] $lengths[$j] $types[$k]";
        }
    }
}
echo implode('<br>', $strings);
Ответ написан
Комментировать
@vdem
$col1 = array();
$col2 = array();
$col3 = array();
$sourceFile = fopen('source.csv', 'r');
while($row = fgetcsv($sourceFile)) {
    list($col1[], $col2[], $col3[]) = $row;
}
fclose($sourceFile);
$destFile = fopen('dest.csv', 'w');
foreach($col1 as $c1) {
    foreach($col2 as $c2) {
        foreach($col3 as $c3) {
            fputcsv($destFile, array($c1, $c2, $c3));
        }
    }
}
fclose($destFile);

Вот. Запускать не пробовал, обработку ошибок не добавлял.
Ответ написан
Комментировать
@mende11eev Автор вопроса
есть идеи насчет второй части задачи?(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы