beachcoder.co.uk

22Mar/11Off

‘Share’ links generator

I don't know about you, but I spend far too much of my time creating those blasted 'Share' links. Well, I did, until I wrote this pair of handy functions.

They will create share links for Facebook, twitter, delicious and StumbleUpon on the fly. Additionally you can pass any URL to create a share link to, and a title if you like.

You can create more definitions very easily by adding to the $types array. Use the terms #URL# and #TITLE# for the URL and title, or #UURL# and #UTITLE# for the urlencode() versions.

function share($type=null,$url=null,$title=null){
	// I store various page data in an $args array.
	// For this function, I'm be using the page title.
	// If you don't have a page title, it'll be ignored.
	global $args;
 
	// Type definitions
	$types=array(
		'fb'=>'http://www.facebook.com/sharer.php?u=#UURL#&t=#UTITLE#',
		'tw'=>'http://twitter.com/home?status=#UTITLE# #UURL#',
		'dl'=>'http://www.delicious.com/save?url=#UURL#&title=#UTITLE#',
		'sl'=>'http://www.stumbleupon.com/submit?url=#UURL#&title=#UTITLE#'
	);
 
	// Sanity checks
	if(!$type)return 'NO TYPE REQUESTED';
	if(!array_key_exists($type,$types))return 'UNDEFINED TYPE REQUESTED';

	// Build the share link
	if(!$url)$url=thisurl();
	$title=(!$title&&$args['page']['title'])?$args['page']['title']:$title;
	$find=array('#URL#','#TITLE#','#UURL#','#UTITLE#');
	$replace=array($url,$title,urlencode($url),urlencode($title));
	return str_replace($find,$replace,$types[$type]);
}
function thisurl(){
	// Return the full page URL
	$host=strtolower(array_shift(explode('/',$_SERVER['SERVER_PROTOCOL']))).'://';
	$uri=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
	return($host.$uri);
}

// Usage:
echo share('fb');
echo share('tw');
echo share('dl');
echo share('su');
7Mar/11Off

PHP and Roman Numerals

After hunting around for functions that convert Arabic numbers to Roman numerals and vice versa, everything I found was huge (~100 lines) except for one very graceful function to convert Arabic numbers to Roman numerals. So I combined it with my own Roman to Arabic converter.

Pass it an int, a numeric string or a string of Roman numerals, and it will convert from one to the other.

Feel free to use the function in your own projects, but please keep the attributions intact.

function roman($num){
	$result='';
	$numerals=array(
		'M' =>1000,
		'CM'=>900,
		'D' =>500,
		'CD'=>400,
		'C' =>100,
		'XC'=>90,
		'L' =>50,
		'XL'=>40,
		'X' =>10,
		'IX'=>9,
		'V' =>5,
		'IV'=>4,
		'I' =>1
	);
	if(preg_match('/^[0-9]+$/',$num)){
		// To Roman: www.go4expert.com/forums/showthread.php?t=4948
		$n=intval($num);
		foreach($numerals as $roman=>$value){
			$matches=intval($n/$value);
			$result.=str_repeat($roman,$matches);
			$n=$n%$value;
		}
	}else{
		// To Arabic: www.beachcoder.co.uk/php-and-roman-numerals/
		$num=strtoupper($num);
		for($i=0;$i<strlen($num);$i++){
			$letter=$num[$i];
			$next=$num[$i+1];
			if($next&&$numerals[$next]>$numerals[$letter]){
				$result+=$numerals[$next]-$numerals[$letter];
				$i++;continue;
			}
			$result+=$numerals[$letter];
		}
	}
	return $result;
}

// Usage
echo roman('1000'); // M
echo roman(1100);   // MC
echo roman('MC');   // 1100
Filed under: PHP No Comments