Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Генерация уникальных комбинаций двух массивов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
jonston
Отправлено: 31 Января, 2014 - 21:52:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Здравствуйте!Вот вам не тривиальный вопрос.
Есть два массива:
PHP:
скопировать код в буфер обмена
  1. $arr1 = array('1', '2', '3');
  2. $arr2 = array('5', '6', '7');

Нужно создать функцию которая возвращает все возможные комбинации между элементами этих двух массивов.
Для наглядности должен получится такой вот массив:
PHP:
скопировать код в буфер обмена
  1.     '1-5', '2-5', '3-5',
  2.     '1-6', '2-5', '3-5',
  3.     '1-7', '2-5', '3-5',
  4.      
  5.     '1-5', '2-6', '3-5',
  6.     '1-6', '2-6', '3-5',
  7.     '1-7', '2-6', '3-5',
  8.      
  9.     '1-5', '2-7', '3-5',
  10.     '1-6', '2-7', '3-5',
  11.     '1-7', '2-7', '3-5',
  12.    
  13.     '1-5', '2-5', '3-6',
  14.     '1-6', '2-5', '3-6',
  15.     '1-7', '2-5', '3-6',
  16.      
  17.     '1-5', '2-6', '3-6',
  18.     '1-6', '2-6', '3-6',
  19.     '1-7', '2-6', '3-6',
  20.      
  21.     '1-5', '2-7', '3-6',
  22.     '1-6', '2-7', '3-6',
  23.     '1-7', '2-7', '3-6',
  24.    
  25.     '1-5', '2-5', '3-7',
  26.     '1-6', '2-5', '3-7',
  27.     '1-7', '2-5', '3-7',
  28.      
  29.     '1-5', '2-6', '3-7',
  30.     '1-6', '2-6', '3-7',
  31.     '1-7', '2-6', '3-7',
  32.      
  33.     '1-5', '2-7', '3-7',
  34.     '1-6', '2-7', '3-7',
  35.     '1-7', '2-7', '3-7',
  36. );

На первый взгляд кажется что легко, но столкнувшись понимаешь что не все так просто.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
LIME
Отправлено: 31 Января, 2014 - 21:54:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




элементарно
декартово произведение
тут похлеще варианты подымались))
вложенные циклы
не интересно
 
 Top
OrmaJever Модератор
Отправлено: 31 Января, 2014 - 21:58:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




jonston пишет:
На первый взгляд кажется что легко, но столкнувшись понимаешь что не все так просто.

По-моему это и не на первый взгляд не сложно Подмигивание
PHP:
скопировать код в буфер обмена
  1. $arr1 = array('1', '2', '3');
  2. $arr2 = array('5', '6', '7');
  3. $arr = array();
  4.  
  5. foreach($arr1 as $v1) foreach($arr2 as $v2) $arr[] = $v1 . ' - ' . $v2;
  6.  
  7. print_r($arr);

jonston пишет:
Для наглядности должен получится такой вот массив:

А что это за масив в котором всё повторяется? В чём смысл повторов?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
jonston
Отправлено: 31 Января, 2014 - 21:59:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




LIME пишет:
элементарно
декартово произведение
тут похлеще варианты подымались))
вложенные циклы
не интересно

Ну так напиши.Помоги мне.Будет у тебя 229 плюсов.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
LIME
Отправлено: 31 Января, 2014 - 22:01:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)





OrmaJever ну если уж в одну строку то и вывод бы там сделать))
либо красиво либо экономить))
ато все наполовину))

(Добавление)

jonston пишет:
Будет у тебя 229 плюсов.
я хочу 49
тогда интереснее было
 
 Top
jonston
Отправлено: 31 Января, 2014 - 22:12:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




OrmaJever пишет:

По-моему это и не на первый взгляд не сложно Подмигивание


Не правильно.У тебя 9 элементов.А у массива который я дал выше 81.Возможно я не правильно сформулировал.

первый цикл:
'1-5', '2-5', '3-5' - первый, второй, и третий элемент первого массива взяли себе первый элемент второго
второй цикл:
'1-6', '2-5', '3-5' - все так же только первый элемент в комбинации со вторым элементом второго.И так далее.Получается уникальные ряды комбинаций.Ну вобщем нужно рассмотреть логику.
(Добавление)
LIME, Я реально говорю не так все просто.Попробуй.

(Отредактировано автором: 31 Января, 2014 - 22:18:15)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
LIME
Отправлено: 31 Января, 2014 - 22:19:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




да...поспешили...
ясно что не декартово
но лениво...я удаляюсь)
 
 Top
jonston
Отправлено: 31 Января, 2014 - 22:19:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




LIME пишет:
да...поспешили...
ясно что не декартово
но лениво...я удаляюсь)

Жаль.Неплохая практика.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
LIME
Отправлено: 31 Января, 2014 - 22:20:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




jonston я извиняюсь за слишком спешный вывод но пробовать лениво
 
 Top
jonston
Отправлено: 31 Января, 2014 - 22:21:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




LIME пишет:
jonston я извиняюсь за слишком спешный вывод но пробовать лениво

Без проблем.Заглядывай.Может свой вариант выложу.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
LIME
Отправлено: 31 Января, 2014 - 22:25:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




да не сложно вроде
3 цикла и все
подумай
 
 Top
DelphinPRO
Отправлено: 31 Января, 2014 - 22:51:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




jonston пишет:
Генерация уникальных комбинаций двух массивов

Я прошу прощения, а где здесь уникальные комбинации? Все комбинации повторяются по нескольку раз. По-моему задание слегка некорректно.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
jonston
Отправлено: 31 Января, 2014 - 22:55:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




DelphinPRO пишет:
jonston пишет:
Генерация уникальных комбинаций двух массивов

Я прошу прощения, а где здесь уникальные комбинации? Все комбинации повторяются по нескольку раз. По-моему задание слегка некорректно.

Извиняюсь.Уточняю уникальные ряды комбинаций


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
T1grOK
Отправлено: 01 Февраля, 2014 - 13:50:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


Помог: 7 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $arr1 = array('1', '2', '3');
  3. $arr2 = array('5', '6', '7');
  4.  
  5. $result = array();
  6.  
  7. // Высота матрицы / блока
  8. $matrix_h = count($arr2);
  9. // Количество "строк"
  10. $rows = pow($matrix_h, count($arr1) - 1);
  11.  
  12. foreach($arr1 as $column => $value){
  13.         // Количество повторений одного значения
  14.         $repeats = pow($matrix_h, $column + 1) / $matrix_h;    
  15.         // Количество повторений(итераций) всех значений
  16.         $iterations = $rows / $repeats;
  17.         $current_row = 0;
  18.        
  19.         while($iterations > 0){
  20.                 foreach($arr2 as $value2){
  21.                         for($repeat = 0; $repeat < $repeats; $repeat++){               
  22.                                 $result[$current_row][$column] = $value.'-'.$value2;
  23.                                 $current_row++;
  24.                         }
  25.                 }
  26.                 $iterations--;
  27.         }
  28. }
  29.  
  30. var_dump($result);
  31.  

Остается только собрать в одномерный массив.


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB