Jump to content
php.lv forumi
Pentiums

Noderīgas funkcijas

Recommended Posts

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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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>';

Share this post


Link to post
Share on other sites

heh, būtu zinājis par tādu ucfirst un array_flip, būtu mans kods arī īsāks :))

 

 

EDIT: Nu re, tagad mans kods vēl "optimālāks" :D

Edited by briedis

Share this post


Link to post
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

Share this post


Link to post
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 ;)

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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 ;)

Share this post


Link to post
Share on other sites

ucfirst(mb_strtolower(..)) var aizstāt ar 1nu f-ju mb_convert_case(..,MB_CASE_TITLE) - ja skaita simbolus būs vairāk, ja f-jas, par vienu mazāk.

Share this post


Link to post
Share on other sites

setlocale(LC_TIME, "Latvian_Latvia.1257"); // Win
setlocale(LC_TIME, "LV_lv"); // Linux
function getMonth($month)
{
return strftime("%B", mktime(0, 0, 0, $month, 1, 1970));
}

 

;)

Share this post


Link to post
Share on other sites

Par tiem saīsinātajiem $_GET, $_POST.... Šādi tak arī var

$g = array();
$g = $_GET;

$p = array();
$p = $_POST;

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×