Jump to content
php.lv forumi

random_string()


daGrevis

Recommended Posts

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 );

Link to comment
Share on other sites

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 by 101111
Link to comment
Share on other sites

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ā?

Link to comment
Share on other sites

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;

}

Link to comment
Share on other sites

Hmm, bubu. Ciparus ģenerē tīri labi! =)

 

BL36z49xJHpKkJpMX6NlJy7r6qmnC1sM

aeW3FcSy96ApoeA7kzKSYqQX2KXfWNx8

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 by daGrevis
Link to comment
Share on other sites

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++)?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...