@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 Автор вопроса
есть идеи насчет второй части задачи?(
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
02 мая 2024, в 23:29
1500 руб./в час
02 мая 2024, в 23:16
7500 руб./за проект
15 апр. 2024, в 22:14
30000 руб./за проект