daGrevis Posted November 21, 2010 Report Share Posted November 21, 2010 Sveiki, Funkcija izvada ārā simbolus, katru reizi savādākus. Problēma: nedaudz niķojās ar garumu ($lenght). Tas vispār nestrādā! xD function random_string( $lenght ) { $characters = 'abcdefghijklmnopqrstuvwxyz'; while( strLen ( $string ) < $lenght ) { $string .= subStr( $characters, mt_rand( 1, strLen( $characters ) ) ); } return $string; } echo random_string( 6 ); Quote Link to comment Share on other sites More sharing options...
101111 Posted November 21, 2010 Report Share Posted November 21, 2010 (edited) droši vien tapēc ka funkcija subStr atgriež apakšvirkni. un tev sanāk ka katrā iterācijā rezultāta virknei tiek pielikta galā apakšvirkne no $characters. tāpēc arī sanāk tāda neprognozējama garuma virkne. iedodot subStr funkcijai trešo argumentu - apakšvirnes garumu (kas šajā gadījumā būs 1), iespējams tiks panākts tas ko tu gribi panākt Edited November 21, 2010 by 101111 Quote Link to comment Share on other sites More sharing options...
mounkuls Posted November 21, 2010 Report Share Posted November 21, 2010 Sāc laikam ar to, ka sākumā to $string tomēr definē lai strlen($string) nebūtu nekas, bet vērtība. (varbūt ka šancē arī tā pat, bet es tā nedarītu tomēr). $string .= subStr( $characters, mt_rand( 1, strLen( $characters ) ) ); nekad neizvēlēsies par vērtību pirmo simbolu. No otras puses, kāpēc netaisi uzreiz $string = substr(array_shuffle($characters),0,$lenght); savā funkcijā? Quote Link to comment Share on other sites More sharing options...
marcis Posted November 22, 2010 Report Share Posted November 22, 2010 Palasi substr() manuāli. Tu funkcijai padod tikai 2 argumentus - string un start. Attiecīgi, ja mt_rand() atgriezīs 2, substr() atgriezīs visu tavu simbolu rindu, nogriežot pirmos 2 simbolus. Tev tur substr() vispār nav vajadzīgs: $string.= $characters[rand(0, strlen($characters)-1)]; Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 22, 2010 Author Report Share Posted November 22, 2010 Skaidrs, ņemšu vērā ieteikumus. =) Izlaboju Savu, atkal jau, neuzmanības kļūdu! ^^ random_string(): function random_string( $lenght, $characters = '' ) { if( empty( $characters ) ) { $characters = '0123456789' . 'abcdefghijklmnopqrstuvwxyz' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; } $string = ''; while( strLen ( $string ) < $lenght ) { $string .= subStr( $characters, mt_rand( 1, strLen( $characters ) ), 1 ); } return $string; } Quote Link to comment Share on other sites More sharing options...
bubu Posted November 22, 2010 Report Share Posted November 22, 2010 Tavs kods nekad stringā neieģenerē ciparu 0. Un ja ļoti nepaveiksies, tad izdos warningu/erroru, ka gribi aiztikt nākamo simbolu aiz stringa $characters pēdējā simbola. Quote Link to comment Share on other sites More sharing options...
Леший Posted November 22, 2010 Report Share Posted November 22, 2010 Un vispār, pareizi ir length, nevis lenght. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 22, 2010 Author Report Share Posted November 22, 2010 (edited) Hmm, bubu. Ciparus ģenerē tīri labi! =) BL36z49xJHpKkJpMX6NlJy7r6qmnC1sMaeW3FcSy96ApoeA7kzKSYqQX2KXfWNx8 dnHYHKUgRzWZenOmp72FzqNEoIGMTaAV T8BZ1A5LATqPysYmUljrD8ARemeDhhPU 84UxOZCtrS7ZdeNxCkYsb4UgJVfFY2xx npXDZh7UupIO1PF3JXsJszBBcfYZyMrn tyOGwvzpRogEwHGLDZI4b9PsfR85P2fm VIefQAenQR6tdxpxzcIUHlO9MCsPT9xW Aisfw2yKBVAiPktcWZQHFBO4dDbbsbUl bVM5X8HbuQ7QuBPOKkVC5csNsBNFBa3X Bubu, palaidu to funkciju 100'000 reizes (caur for ciklu). Nekādus error'us nesaņēmu. =( Pietam, izejot cauri atkal un atkal tam visam īsti nesaprotu, kāpēc gan tā varētu notikt. Vai tik tur nav saistība ar to, ka PHP sāk skaitīt no nulles (Lūk, PHP freak's! Skolā laikam nav gājis! xD)! Леший, pastāv divas angļu valodas. UK un US. Tas ir tāpat kā pateikts, ka "color" ir nepareizi un ir jālieto "colour". xDD Labojums: Smagi atvainojos. Mana kļūda. Tev taisnība. Nedaudz piedomāju klāt, tāpēc sanāca nepareizi. Mana kļūda, njāā... Labojums #2: http://www.allquests.com/question/3220604/Length-and-lenght.html Edited November 22, 2010 by daGrevis Quote Link to comment Share on other sites More sharing options...
Леший Posted November 22, 2010 Report Share Posted November 22, 2010 bubu ir taisnība, jo tu tajā saģenerētā rindā neredzi bool(false) starp simboliem. Substr() skaita no nulles: $string .= subStr( $characters, mt_rand( 1, strLen( $characters ) )-1, 1 ); Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 22, 2010 Author Report Share Posted November 22, 2010 Liels paldies! =) Quote Link to comment Share on other sites More sharing options...
marcis Posted November 22, 2010 Report Share Posted November 22, 2010 Substr() skaita no nulles Tad jau arī nulli varētu padot kā min, ne? $string .= subStr( $characters, mt_rand( 0, strLen( $characters ) )-1, 1 ); Quote Link to comment Share on other sites More sharing options...
Леший Posted November 22, 2010 Report Share Posted November 22, 2010 Nē, jo -1 stāv ārpus mt_rand(); Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 22, 2010 Author Report Share Posted November 22, 2010 Леший, Man mt_rand() ņem negatīvus skaitļus... =)) Quote Link to comment Share on other sites More sharing options...
Леший Posted November 22, 2010 Report Share Posted November 22, 2010 (edited) substr arī? ;) If start is negative, the returned string will start at the start'th character from the end of string. Edited November 22, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted November 22, 2010 Report Share Posted November 22, 2010 Priekš kam tur vispār substr? $characters[mt_rand(1,strlen($characters))-1] Turklāt daudz pareizāk būtu strlen($characters) izpildīt tikai vienreiz, nevis katru reizi pārrēķināt. Un vispār, es taisītu daudz savādāk. :) Jo neredzu jēgu, katru reizi salīdzināt, vai izveidotā stringa garums ir vienāds ar nepieciešamo. Tu jau zini, kāds ir būs nepieciešams, un nevar rasties situācija, ka var būt īsāks, kāpēc tad labāk neizmatot for($i=0;$i<$length;$i++)? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.