За последние 24 часа нас посетили 21734 программиста и 1021 робот. Сейчас ищут 679 программистов ...

Перестройка двумерного массива

Тема в разделе "Решения, алгоритмы", создана пользователем Genetics, 9 май 2016.

  1. Genetics

    Genetics Новичок

    С нами с:
    9 май 2016
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте.

    Не подскажите как из массива:
    Array (
    [1] => Array ( [ ] => A [ ] => B [ ] => C )
    [2] => Array ( [ ] => Серый [ ] => Чёрный )
    )

    сделать следующий массив:
    Array (
    [ ] => Array ( [1] => A [2] => Серый )
    [ ] => Array ( [1] => A [2] => Чёрный )
    [ ] => Array ( [1] => B [2] => Серый )
    [ ] => Array ( [1] => B [2] => Чёрный )
    [ ] => Array ( [1] => C [2] => Серый )
    [ ] => Array ( [1] => C [2] => Чёрный )
    )

    то есть, перебрать массив со всеми возможными комбинациями, но чтоб они не повторялись.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    пользуйся ббкодом [ code ] для оформления.
    данные будут выглядеть лучше, а главное, удобнее для подстановки помошниками, если будешь использовать var_export()

    https://www.google.ru/search?q=php+generate+all+combinations+array
     
  3. Genetics

    Genetics Новичок

    С нами с:
    9 май 2016
    Сообщения:
    3
    Симпатии:
    0
    ОК, исправил.
    Массив:
    Код (Text):
    1. Array
    2. (
    3.     [1] => Array
    4.         (
    5.             [3] => A
    6.             [4] => B
    7.             [5] => C
    8.         )
    9.     [2] => Array
    10.         (
    11.             [9] => Серый
    12.             [10] => Чёрный
    13.         )
    14. )
    Результат:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [1] => A
    6.             [2] => Серый
    7.         )
    8.     [1] => Array
    9.         (
    10.             [1] => A
    11.             [2] => Чёрный
    12.         )
    13.     [2] => Array
    14.         (
    15.             [1] => B
    16.             [2] => Серый
    17.         )
    18.     [3] => Array
    19.         (
    20.             [1] => B
    21.             [2] => Чёрный
    22.         )
    23.     [4] => Array
    24.         (
    25.             [1] => C
    26.             [2] => Серый
    27.         )
    28.     [5] => Array
    29.         (
    30.             [1] => C
    31.             [2] => Чёрный
    32.         )
    33. )
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    вооооот! так ведь намного лучше. но var_export() был бы ещё лучше.

    ответ собственно уже даден. гугль всё об этом знает. вот конкретно оттуда:
    Код (PHP):
    1. <?php
    2.  
    3. function combos($data, &$all = [], $group = [], $val = null, $i = 0)
    4. {
    5.     if (isset($val)) {
    6.         array_push($group, $val);
    7.     }
    8.     if ($i >= count($data)) {
    9.         array_push($all, $group);
    10.     } else {
    11.         foreach ($data[$i] as $v) {
    12.             combos($data, $all, $group, $v, $i + 1);
    13.         }
    14.     }
    15.     return $all;
    16. }
    17.  
    18. $data = [
    19.     ['A', 'B', 'C'],
    20.     ['gray', 'black'],
    21. ];
    22.  
    23. $combos = combos($data);
    24.  
    25. var_export($combos);[/php]
     
  5. Genetics

    Genetics Новичок

    С нами с:
    9 май 2016
    Сообщения:
    3
    Симпатии:
    0
    Спасибо, то, что нужно.