Jump to content
php.lv forumi

Noderīgas funkcijas


Pentiums

Recommended Posts

  • Replies 108
  • Created
  • Last Reply

Top Posters In This Topic

Vienkārša funkcija, kas atgriež mēneša nosaukumu latviski, ja tiek padots skaitlis 1-12, ja tiek padots mēneša nosaukums, tad tiek atgriezts mēneša skaitlis.

 

padod 1 atgriež "Janvāris"

padod "Janvāris" atgriež 1

 

function getMonth($month){
	$months[1] = "Janvāris";
	$months[2] = "Februāris";
	$months[3] = "Marts";
	$months[4] = "Aprīlis";
	$months[5] = "Maijs";
	$months[6] = "Jūnijs";
	$months[7] = "Jūlijs";
	$months[8] = "Augusts"; 
	$months[9] = "Septembris";
	$months[10] = "Oktobris";
	$months[11] = "Novembris";
	$months[12] = "Decembris";

	if(is_numeric($month)){
		$month = (int)$month;
		if(array_key_exists($month,$months)){
			return $months[$month];
		}else{
			return false;
		}
	}else{
		foreach($months as $key=>$item){
			$month = mb_strtolower(trim($month), "utf-8");
			$item = mb_strtolower($item, "utf-8");
			if($item == $month){
				return $key;
			}
		}
	}
	return false;
}

Link to comment
Share on other sites

es labāk šoreiz neko neteikšu par optimizēšanu, kā 16x rindiņu vietā rakstīt 2x :D:D:D

 

Īpašā optimizācija priekš 2easy ;)

 

<?
function getMonth($month){
	$months = Array("janvāris", "februāris", "marts", "aprīlis", "maijs", "jūnijs", "jūlijs", "augusts", "septembris", "oktobris", "novembris", "decembris");
	return isset($months[(int)$month-1]) ? ucfirst($months[(int)$month-1]) : ($m = array_search(mb_strtolower($month,"utf-8"), $months) !== false ? $m + 1 : false);
}
?>

 

Diemžēl, te no kiss paliek pāri tikai kis :D

 

EDIT: atjaunoju kopu :p

Edited by briedis
Link to comment
Share on other sites

function getMonth($v) {  // izdod mēnesi (abos virzienos): mēneša numurs -> mēneša nosaukums, mēneša nosaukums -> mēneša numurs
$a = array('Janvāris', 'Februāris', 'Marts', 'Aprīlis', 'Maijs', 'Jūnijs', 'Jūlijs', 'Augusts', 'Septembris', 'Oktobris', 'Novembris', 'Decembris');
if (is_numeric($v)) return isset($a[$v - 1]) ? $a[$v - 1] : null;
else {
	$a = array_flip($a);
	$v = ucfirst(mb_strtolower(trim($v)));
	return isset($a[$v]) ? $a[$v] + 1 : null;
}
}

// test
mb_internal_encoding('utf-8');
echo '<pre>' .
getMonth(7) . "\n" .  // Jūlijs
getMonth(100) . "\n" .  // null
getMonth('Jūlijs') . "\n" .  // 7
getMonth('jūlijs') . "\n" .  // 7
getMonth('JŪLIJS') . "\n" .  // 7
getMonth(' jūlijs ') . "\n" .  // 7
getMonth('asdf') . "\n" .  // null
'</pre>';

Link to comment
Share on other sites

Savukārt, labi dokumentēts, skaists un optimāls kods, kuram pierakstīts arī autors komentāru galvgalī, strauji radīs pozitīvu priekštatu par programmētāju, kurš šo kodu ir radījis.

autoru komentāru galvgalī raksta tamdēļ, lai zinātu, kurš ir jāsit, kad kkas "nejies" :D:D:D

 

izdzīvošanas taktika PSRS laikā:

1) ja tu domā, tad neraksti

2) ja tu domā un raksti, tad neparaksties

3) ja tu domā, raksti un paraksties, tad nebrīnies

Link to comment
Share on other sites

vispar jau topiks ir Noderigas f-jas, nevis 'kraninju merishnas' sacensibas ;)

Ja menis izmantotu f-ju 'norej', tad tas tikai nosit velimi kautko sheit ieposteet..

Jo daudziem ir f-jas kas rakstiitas stipri pasen ( reti kura buus PHP3 bet daudzas buus PHP 4) , bet idejiski joprojam aktualas...

Taa kaa, labak nevajadzetu kritizeet & spriest ka 'nav idialogiski pareizi' etc..

Galvenais tomer ir doma, kaa un ko atrak izveidot. ==> skatiit Topika nosaukumu ;)

Link to comment
Share on other sites

Šķiet pagaidām īsākais variants:

 function getMonth($m){
   $z = Array("","janvāris", "februāris", "marts", "aprīlis", "maijs", "jūnijs", "jūlijs", "augusts", "septembris", "oktobris", "novembris", "decembris");
   return ($m>=1 and $m<13)?$z[(int)$m]:array_search(mb_strtolower(trim($m),"utf-8"),$z);
 }  

 echo ($s=getMonth('ABC'))?'Y:'.$s:'N';  //N
 echo '<br />';
 echo ($s=getMonth('1'))?'Y:'.$s:'N';  //Y:janvāris
 echo '<br />';
 echo ($s=getMonth(3))?'Y:'.$s:'N';  //Y:marts
 echo '<br />';
 echo ($s=getMonth('jŪnijs'))?'Y:'.$s:'N';  //Y:6
 echo '<br />';
 echo ($s=getMonth(' jūnijs'))?'Y:'.$s:'N';  //Y:6
 echo '<br />';
 echo ($s=getMonth('13'))?'Y:'.$s:'N';   //N
 echo '<br />';    
 echo ($s=getMonth(12.5))?'Y:'.$s:'N';   //Y:decembris
 echo '<br />';
 echo ($s=getMonth('13.5'))?'Y:'.$s:'N';   //N
 echo '<br />';  

Strādā arī ar daļskaitļiem

 

Kurš var īsāk?

Edited by codez
Link to comment
Share on other sites

codez, u r my hero! :))

 

EDIT:

es gan pa vidu rakstītu mazliet vairāk whitespace, lai būtu vieglāk lasīt (Java droši vien arī priecāsies par to :D). bet tā jau tiešām tavs variants rulez. gan tā pirmā pārbaude, gan array_search() ftw

function getMonth($v) {  // izdod mēnesi (abos virzienos): mēneša numurs -> mēneša nosaukums, mēneša nosaukums -> mēneša numurs
$a = array('', 'Janvāris', 'Februāris', 'Marts', 'Aprīlis', 'Maijs', 'Jūnijs', 'Jūlijs', 'Augusts', 'Septembris', 'Oktobris', 'Novembris', 'Decembris');
return $v >= 1 && $v <= 12 ? $a[$v] : array_search(ucfirst(mb_strtolower(trim($v))), $a);
}

Edited by 2easy
Link to comment
Share on other sites

Ja menis izmantotu f-ju 'norej', tad tas tikai nosit velimi kautko sheit ieposteet..

tas nu gan ir baigi atkarīgs no cilvēka. es tieši otrādi vsp neko nepostotu kkādā dead forumā, kur būtu 0 reakcija. jo vairāk kritikas, jo labāk. tā var kko jaunu iemācīties. vismaz man tas liekas labāk nekā dzīvot kkādā pašpārliecinātības burbulī. tā jau visam ir dafiga visādi standarta risinājumi. optimizēšana ir viens no virzieniem, kur vēl saglabājas challenge ;)

Link to comment
Share on other sites

Vienkārša funkcija, kas parāda lietotāju skaitu, kas ir veikuši kādas aktivitātes norādītajā laika posmā (5min)

 

	//Dabūjam lietotāju skaitu kas ir online
function getOnlineUserCount(){
	$ip = ip2long($_SERVER['REMOTE_ADDR']);
	$now = time();
	$delta = $now - 300; //5 minūtes
	mysql_query("DELETE FROM lietotaji_online WHERE last_seen < $delta OR ip = $ip");
	mysql_query("INSERT INTO lietotaji_online(ip,last_seen) VALUES($ip,'$now')");
	$data = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) FROM lietotaji_online"));
	return (int)$data['COUNT(*)'];
}

 

Tabula, kur glabājas

CREATE TABLE lietotaji_online (
 ip bigint NOT NULL,
 last_seen int(11) NOT NULL,
 PRIMARY KEY  (ip),
 INDEX (last_seen)
)ENGINE = MEMORY;

 

EDIT1: pievienots ENGINE = MEMORY

EDIT2: pievienots indekss last_seen (jā, par šito biju štukojis, bet nepieliku)

EDIT3: pielaboju kvērijus (noņēmu nevajadzīgās pēdiņas)

Edited by briedis
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...