Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 05:08 07.07.25 
Компютри и Интернет
   >> PHP
*Кратък преглед

Тема Помощ за цикъл с масивнови  
Автор daxen (Добре Познат)
Публикувано06.09.07 22:07



Здравейте ,
седя си тука и се чудя една простотия как да направя и нищо не ми идва
в главата , та реших да питам :

имам един масив
$array[0]="A";
$array[1]="B";
$array[2]="C";
$array[3]="D";

не мога да се сетя как да го завъртя в цикъл така че като се извърти да го
дабави още пак , така че да се получи нещо от сорта като го принтвам

A,B,C,D,AA,AB,AC,AD,AAA,AAB,AAC,AAD,ABA,ABC,ABD,ACA и тн. до 10 символа - примерно=

Моля ви да ми отворите малко очите :)



Тема Re: Помощ за цикъл с масивнови [re: daxen]  
Автор croesus (?!?)
Публикувано07.09.07 14:54



По какъв начин се образуват елементите в тази редица? Дали могат да започват с всяка от буквите A, B, C и D или само с А, както си показал?

Ако могат да започват с всяка от четирите букви то значи при N символа за дължина ще имаш 4^N елемента, а сумарно със стринговете с по-малка дължина - (4^(N+1) - N)/3. При 10 символа - 1,4 милиона елемента. Хм, за какво ти е такъв масив?

Редактирано от croesus на 07.09.07 14:55.



Тема Re: Помощ за цикъл с масив [re: croesus]  
Автор daxen (Добре Познат)
Публикувано07.09.07 16:12



Да трябва да извърти всички комбинации и като ги извърти , да добави още един масив и да върти комбинациите с него , и точно това не ми ясно как като извърти всички комбинации да добави още един път масива , а иначе май се сещаш за какво ми е :)



Тема Re: Помощ за цикъл с масивнови [re: daxen]  
Автор croesus (?!?)
Публикувано07.09.07 17:59




$arr[0] = "A";
$arr[1] = "B";
$arr[2] = "C";
$arr[3] = "D";

function extend_array($max_str_len, &$arr_ref)
{
$search_arr = array("0","1","2","3");
$replace_arr = array("A","B","C","D");
$index_offset = 4;
for($i = 2;$i <= $max_str_len;$i++)
{
for($j = 0;$j < pow(4, $i);$j++)
{
$next_num = base_convert($j, 10, 4);
$next_num = str_repeat("0", $i - strlen($next_num)).$next_num;
$arr_ref[$index_offset + $j] = str_replace($search_arr, $replace_arr, $next_num);
}
$index_offset += pow(4, $i);
}
}
extend_array(4, $arr);

print_r($arr);


Идеята е малко шашава - ако "редим" стринговете с определена дължина и почваме с индекс 0, то за всеки елемент на масива стойността му ще е равна на индекса му, само че в четворична система (при заменки A=0, B=1, C=2, D=3).


Обратното също е вярно - ако вземем числата от 0 до 4^N и ги обърнем в четворична система, след което направим заменките - 0=A, 1=B, 2=C, 3=D, то ще получим неповтарящите се комбинации от четирите букви, които търсиш. Тъй като обаче масива от стрингове с дължина N се долепя до вече готовите с дължини 1, 2, ... N-1 то първият му индекс няма да е 0, а ще малко изместен, което се постига с променливата $index_offset. Редът пък $next_num = str_repeat("0", $i - strlen($next_num)).$next_num; е понеже base_convert не връща пълнотекстови стрингове (т.е. "0012", вместо "12") и изпуска началните нули, които са важни в нашия случай, понеже нулата я заменяме с А.



Тема Re: Помощ за цикъл с масивнови [re: croesus]  
Автор daxen (Добре Познат)
Публикувано07.09.07 18:57



Благодаря ти за подробното обяснение,
върши ми перфектна работа :)




*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.