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
Форумы портала PHP.SU :: Версия для печати :: Все возможные комбинации массивов [2]
Форумы портала PHP.SU » PHP » Программирование на PHP » Все возможные комбинации массивов

Страниц (3): « 1 [2] 3 »
 

16. tuareg - 17 Августа, 2012 - 11:41:05 - перейти к сообщению
Если я правильно думаю, то решение было вот тут http://forum.php.su/topic.php?fo...pic=6137&p=2
17. armancho7777777 - 17 Августа, 2012 - 11:51:16 - перейти к сообщению
Там тоже не то ))
Там тоже выдаются не все комбинации ))
18. tuareg - 17 Августа, 2012 - 11:58:17 - перейти к сообщению
armancho7777777 пишет:
Там тоже выдаются не все комбинации ))

Пример "в студию", исходные данные, что надо получить
19. armancho7777777 - 17 Августа, 2012 - 12:14:40 - перейти к сообщению
tuareg пишет:
что надо получить

Ответ в названии темы вообще-то))
20. tuareg - 17 Августа, 2012 - 12:21:27 - перейти к сообщению
armancho7777777 пишет:
Ответ в названии темы вообще-то))

А вот если попробовать запустить мой вариант с массивом, из первого поста получим то что надо ТС Улыбка
Вот я и спрашивал какие еще комбинации надо
21. armancho7777777 - 17 Августа, 2012 - 12:29:35 - перейти к сообщению
tuareg пишет:
А вот если попробовать запустить мой вариант с массивом, из первого поста получим то что надо ТС

Да нет.
(Добавление)
Ваш вариант:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     [0] => ассортимент вай концерн
  3.     [1] => ассортимент вай 23
  4.     [2] => ассортимент вайe концерн
  5.     [3] => ассортимент вайe 23
  6.     [4] => ассортимент dfdf концерн
  7.     [5] => ассортимент dfdf 23
  8.  


А все возможные комбинации это как минимум:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     [0] => ассортимент вай концерн
  3.     [1] => ассортимент вай 23
  4.     [2] => ассортимент вайe концерн
  5.     [3] => ассортимент вайe 23
  6.     [4] => ассортимент dfdf концерн
  7.     [5] => ассортимент dfdf 23
  8.     [6] => ассортимент концерн вай
  9.     [7] => ассортимент 23 вай
  10.     [8] => ассортимент концерн вайe
  11.     [9] => ассортимент 23 вайe
  12.     [10] => ассортимент концерн dfdf
  13.     [11] => ассортимент 23 dfdf
  14.  
22. tuareg - 17 Августа, 2012 - 12:34:03 - перейти к сообщению
Так-то я проверил если что Хм
Вот файл, там только массив немного другой в плане
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr= array(
  3.                 0=>array(1,2,3),
  4.                 1=>array(4),
  5.                 2=>array(5,6)
  6. );
  7.  
23. EuGen - 17 Августа, 2012 - 12:34:41 - перейти к сообщению
Насколько я понимаю, то, что приведено в первом сообщении темы, есть декартово произведение кортежей произвольной длины:
PHP:
скопировать код в буфер обмена
  1. function decartProductPair($rgArg0, $rgArg1)
  2. {
  3.    $rgResult=array();
  4.    for($i=0; $i<count($rgArg0); $i++)
  5.    {
  6.       for($j=0; $j<count($rgArg1); $j++)
  7.       {
  8.          $rgResult[]=array_merge((array)$rgArg0[$i], (array)$rgArg1[$j]);
  9.       }
  10.    }
  11.    return $rgResult;
  12. }
  13. function decartProduct()
  14. {
  15.    $rgArgs   = func_get_args();
  16.    if(!count($rgArgs))
  17.    {
  18.       return array();
  19.    }
  20.    $rgResult = array_shift($rgArgs);
  21.    while($rgArg=array_shift($rgArgs))
  22.    {
  23.       $rgResult=decartProductPair($rgResult, $rgArg);
  24.    }
  25.    return $rgResult;
  26. }
  27. $rgArg0=array(1, 2, 3);
  28. $rgArg1=array(4);
  29. $rgArg2=array(5, 6);
  30.  
  31. $rgResult=decartProduct($rgArg0, $rgArg1, $rgArg2);
  32. //var_dump($rgResult);

?
24. armancho7777777 - 17 Августа, 2012 - 12:35:08 - перейти к сообщению
Stierus пишет:
1-4-5 не то же самое, что 4-1-5

Более того, 1-4-5 не то же самое, что 5-4-1
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. function array_all_combinations($items, $perms = array(), &$result = array())
  3. {
  4.     if (empty($items))
  5.         {
  6.         $result[] = join(' ', $perms);
  7.     }
  8.         else
  9.         {
  10.         for ($i = count($items) - 1; $i >= 0; --$i)
  11.                 {
  12.              $newitems = $items;
  13.              $newperms = $perms;
  14.              list($foo) = array_splice($newitems, $i, 1);
  15.              array_unshift($newperms, $foo);
  16.              array_all_combinations($newitems, $newperms, $result);
  17.          }
  18.     }
  19.        
  20.         return $result;
  21. }
  22.  
  23.  
  24.  
  25. $rgArg0 = array(1, 2, 3);
  26. $rgArg1 = array(4);
  27. $rgArg2 = array(5, 6);
  28.  
  29. $arr =  array_merge($rgArg0, $rgArg1, $rgArg2);
  30.  
  31. $result = array_all_combinations($arr);
  32.  
  33. echo '<pre>'.print_r($result, 1).'</pre>';
  34.  
25. tuareg - 17 Августа, 2012 - 12:46:32 - перейти к сообщению
И что это было? Не понял
Результат
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => 6
  6.             [1] => 1
  7.             [2] => 2
  8.             [3] => 3
  9.             [4] => 4
  10.             [5] => 5
  11.         )
  12.  
  13.     [1] => Array
  14.         (
  15.             [0] => 5
  16.             [1] => 6
  17.             [2] => 1
  18.             [3] => 2
  19.             [4] => 3
  20.             [5] => 4
  21.         )
  22.  
  23.     [2] => Array
  24.         (
  25.             [0] => 4
  26.             [1] => 5
  27.             [2] => 6
  28.             [3] => 1
  29.             [4] => 2
  30.             [5] => 3
  31.         )
  32.  
  33.     [3] => Array
  34.         (
  35.             [0] => 3
  36.             [1] => 4
  37.             [2] => 5
  38.             [3] => 6
  39.             [4] => 1
  40.             [5] => 2
  41.         )
  42.  
  43.     [4] => Array
  44.         (
  45.             [0] => 2
  46.             [1] => 3
  47.             [2] => 4
  48.             [3] => 5
  49.             [4] => 6
  50.             [5] => 1
  51.         )
  52.  
  53.     [5] => Array
  54.         (
  55.             [0] => 1
  56.             [1] => 2
  57.             [2] => 3
  58.             [3] => 4
  59.             [4] => 5
  60.             [5] => 6
  61.         )
  62.  
  63.     [6] => Array
  64.         (
  65.             [0] => 6
  66.             [1] => 1
  67.             [2] => 2
  68.             [3] => 3
  69.             [4] => 4
  70.             [5] => 5
  71.         )
  72.  ....
  73. [719] => Array
  74.         (
  75.             [0] => 1
  76.             [1] => 2
  77.             [2] => 3
  78.             [3] => 4
  79.             [4] => 5
  80.             [5] => 6
  81.         )
  82.  

Этим Вы что хотели показать?
P.S Может у меня правда версия PHP старая 5.2.... Но ошибок нет Радость
26. armancho7777777 - 17 Августа, 2012 - 12:49:27 - перейти к сообщению
tuareg пишет:
И что это было?

Подправил ))
27. tuareg - 17 Августа, 2012 - 12:51:31 - перейти к сообщению
Не совсем забыли ф-ю pc_permute
28. armancho7777777 - 17 Августа, 2012 - 12:52:26 - перейти к сообщению
Всё, точно подправил уже ))
Можете проверить:

719 уникальных комбинаций Радость
29. EuGen - 17 Августа, 2012 - 12:55:19 - перейти к сообщению
armancho7777777 пишет:
719 уникальных комбинаций

Только не очень понятно, каким образом они соотносятся с тем, что было запрошено в первом сообщении темы.
30. armancho7777777 - 17 Августа, 2012 - 12:55:46 - перейти к сообщению
Я тут разбираюсь просто с тем, что бы функция возвращала по максимальному количеству элементов из списка массивов.

 

Powered by ExBB FM 1.0 RC1