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

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

1. NoPaper - 25 Июля, 2012 - 20:28:15 - перейти к сообщению
Доброго времени суток. Нужна помощь в решении проблемы.
Есть два массива
PHP:
скопировать код в буфер обмена
  1.  
  2.         $a1 = array('минута00','час00');
  3.         $a2 = array('минута0','час0');
  4.  


в результате должен получить все возможные комбинации между элементами массива у которых не равен индекс.
К примеру у значений часа и минуты могут быть нули 00, 01 и т.п. , а может и не быть 0,1...

Полученные значения должны быть такими
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. минута00+час00
  3. минута00+час0
  4. минута0+час00
  5. минута0+час0
  6. час00+минута00
  7. час00+минута0
  8. час0+минута0
  9. час0+минута00


есть код с циклами, но он не универсален, если добавить в массивы день00 и день0, скрипт начинает работать не верно. Есть мысли? Закатив глазки
2. PVG - 25 Июля, 2012 - 20:52:56 - перейти к сообщению
Посмотри функции с не орграниченным кол-вом переменных, где этими неограниченным кол-во будут выступать элементы массивов. Найди количество элементов в функции, а потом уже и цикл сможет работать для них всех.
3. NoPaper - 26 Июля, 2012 - 10:00:56 - перейти к сообщению
Если честно, не очень понятно что делать с этой функцией...
4. Toxa - 26 Июля, 2012 - 11:24:30 - перейти к сообщению
для начала я бы получил массив минут и отдельно массив часов

PHP:
скопировать код в буфер обмена
  1. $a1 = array('минута00','минута0');
  2. $a2 = array('час00','час0');

Затем задача значительно упращается

PHP:
скопировать код в буфер обмена
  1. foreach($a1 as $m)
  2. {
  3.     foreach($a2 as $h)
  4.     {
  5.         echo "$m+$h";
  6.         echo "$h+$m";
  7.     }
  8. }

вот и все
5. PVG - 26 Июля, 2012 - 11:27:54 - перейти к сообщению
Вот, посмотри:
http://it-student[dot]com[dot]ua/verkhne[dot][dot][dot]funkcii-php[dot]html

По поводу кода:

PHP:
скопировать код в буфер обмена
  1.  
  2. function addElements()
  3.  {
  4.   $num = func_num_args();
  5.   $args = func_get_args();
  6.   for($i=0; $i<$num; $i++)
  7.   {
  8.    array_push($masiv,$args[$i]);\\этой функцией мы вставляем в массив аргументов новые значения, в твоем случае это (минута, час, день)
  9.   }
  10.  }
  11. \\то есть чтобы создать массив из всех нужных тебе элементов, пишешь так:
  12. addElements('минута00', 'минута0', 'час00', 'час0', 'день00', 'день0');
  13. while ($masiv[i]) {
  14. $num = $num+1;
  15. $i=$i+1;
  16. }
  17. \\poschitali kolvo elementov massiva. V dannom sluchae ih 6
  18.  


А вот теперь у меня есть одно предложение- перемешивать все вложенными циклами. Только по моему это плохое решение.

Специалисты, что можно тут придумать? А если нельзя ничего, то как можно задавать кол-во вложенных циклов прямо в программе (в данном случае чтобы их было 6, а если убрать день00 и день0, то 4 и т.д.). Можно ли это как-то автоматизировать?

P.S.: Написал что думал, если бред, извините Радость .
(Добавление)
Toxa, так ему нужно добавлять еще "единицы времени", тогда уже твой код не подойдет, т.к. он для часа и минуты. Вот у меня мысли похожие как у тебя (только я все в 1 массив собирал), не понятно как сделать так, чтобы программа сама вкладывала сколько нужно циклов.
6. tuareg - 26 Июля, 2012 - 12:04:23 - перейти к сообщению
Вот посмотрите тему. Должно подойти. http://forum.php.su/topic.php?fo...pic=6137&p=2
7. LIME - 26 Июля, 2012 - 12:38:18 - перейти к сообщению
tuareg там посложнее случай был
не разберутся раз такие вопросы
Toxa все так но можно проще
PHP:
скопировать код в буфер обмена
  1. foreach($a1 as $k1=>$m)
  2. {
  3.     foreach($a2 as $k2=>$h)
  4.     {
  5.         if($k1==$k2) continue;
  6.         echo "$m+$h";
  7.         echo "$h+$m";
  8.     }
  9. }

(Добавление)
стоп...я всетаки не понял задачу оказывается
8. armancho7777777 - 26 Июля, 2012 - 15:57:32 - перейти к сообщению
LIME пишет:
там посложнее случай был

Вообще-то, это то, что поможет ТС )
9. tuareg - 26 Июля, 2012 - 15:58:21 - перейти к сообщению
LIME согласен. Тут прямо в лоб не решить. Надо думать "серьезно" Радость
Хотя по идее можно использовать принцип моего решения.
10. LIME - 26 Июля, 2012 - 16:05:05 - перейти к сообщению
зависит от задачи
может быть > 2 элементов?
кол-во массивов любое?
(Добавление)
возможно и не нужно универсальное решение
11. tuareg - 26 Июля, 2012 - 16:05:46 - перейти к сообщению
armancho7777777 пишет:
Вообще-то, это то, что поможет ТС )

Не-а. Улыбка Мой вариант возвратил бы 4 результата. а тут 9. Но я согласен, что его просто надо доработать Улыбка
12. armancho7777777 - 26 Июля, 2012 - 16:13:44 - перейти к сообщению
Я имел ввиду алгоритм)
13. NoPaper - 26 Июля, 2012 - 19:08:09 - перейти к сообщению
LIME пишет:
зависит от задачи
может быть > 2 элементов?
кол-во массивов любое?
(Добавление)
возможно и не нужно универсальное решение

нужно универсальное решение, массивов, как и элементов может быть n-ное количество, при этом количество элементов в каждом массиве будет равным.

п.с. жаль далеко от компа , не могу проверить предложенные варианты на работоспособность ...
14. LIME - 26 Июля, 2012 - 19:15:05 - перейти к сообщению
раз так то из всего предложенного стоит рассмотреть только вариант по ссылке
15. PVG - 26 Июля, 2012 - 19:33:17 - перейти к сообщению
А можно как-то создать массив функций?

 

Powered by ExBB FM 1.0 RC1