reset($fruit); while (list($key, $val) = each($fruit)) { echo "$key => $val\n"; }
Or easier with a foreach loop e.g.;
// Foreach should begin be resetting foreach ( $fruit as $key => $value ) { echo "$key => $value\n"; }
Sometime you need to preverse references (e.g. when it's an array of objects in PHP4), which can be done efficiently like;
foreach ( array_keys($fruit) as $key ) { echo "$key => {$fruit[$key]}\n"; }
Other functions like file can also be used nicely with foreach e.g.;
foreach ( file('somefile.txt') as $line ) { echo "$line\n"; }
$lines = file('path/to/datafile'); foreach($lines as $line){ $line = preg_replace('/#.*$/','',$line); //strip comments $line = trim($line); //strip whitespaces if(empty($line)) continue; //ignore empty lines //do something with the rest of lines }
Or do it in one line if you have PHP 5.0.1
echo php_strip_whitespace(__FILE__);
This function generates random but pronounceable passwords. (Inspired by this post)
function auth_pwgen(){ $pw = ''; $c = 'bcdfghjklmnprstvwz'; //consonants except hard to speak ones $v = 'aeiou'; //vowels $a = $c.$v; //both //use two syllables... for($i=0;$i < 2; $i++){ $pw .= $c[rand(0, strlen($c)-1)]; $pw .= $v[rand(0, strlen($v)-1)]; $pw .= $a[rand(0, strlen($a)-1)]; } //... and add a nice number $pw .= rand(10,99); return $pw; }
Non-ASCII chars in mail subjects are encoded as described in RFC 2047 – they can either be quoted-printable or BASE64 encoded. The following snippet decodes both in a given subject string.
$subject = preg_replace('/=\?[\w\-]+?\?q\?(.*?)\?=/ie','quoted_printable_decode("\1")',$subject); $subject = preg_replace('/=\?[\w\-]+?\?b\?(.*?)\?=/ie','base64_decode("\1")',$subject); print $subject;
Tag Clouds are very popular to show attribute distribution of data. Unfortunately those tags are usually distributed very unevenly across a dataset, when you have a few very very popular tags, for example. When you divide your font size range in equal slices you end up with most of the tags in the smallest size and a few very big ones without anything in between. The following function fixes this problem by automatically determining how to set the threshold of each slice, so that your tags are more smoothly distributed across the given range.
It expects an associative array (tagname ⇒ tagcount), the minimum and the maximum count of how often a tag is used and the number of sizes to use. It will modify the tags array.
function cloud_weight(&$tags,$min,$max,$levels){ // calculate tresholds $tresholds = array(); for($i=0; $i<=$levels; $i++){ $tresholds[$i] = pow($max - $min + 1, $i/$levels) + $min - 1; } // assign weights foreach($tags as $tag => $cnt){ foreach($tresholds as $tresh => $val){ if($cnt <= $val){ $tags[$tag] = $tresh; break; } $tags[$tag] = $levels; } } } //example $tags = array ( 'foo' => 2, 'bar' => 5, 'baz' => 50 ); cloud_weight($tags,2,50,3); foreach($tags as $tag => $size){ echo '<span style="font-size:'.(($size*0.5)+0.5).'em">'.$tag.'</span> '; }
Have a look at this link for more theory on tagcloud algorithms.
This function can be used to format user supplied text in a simple and safe way. It keeps linebreaks and whitespaces and autolinks URLs. Long URLs are shortened.
/** * Format text with line breaks and linked links */ function safetext($text){ $text = htmlspecialchars($text); $text = preg_replace('/\t/',' ',$text); $text = preg_replace('/ /',' ',$text); $text = preg_replace_callback('/((https?|ftp):\/\/[\w-:?&;#~=\.\/\@]+[\w\/])/ui','format_link',$text); $text = nl2br($text); return $text; } /** * Callback to autolink a URL (with shortening) */ function format_link($match){ $url = $match[1]; str_replace("\\\\'","'",$url); if(strlen($url) > 40){ $title = substr($url,0,30).' … '.substr($url,-10); }else{ $title = $url; } $link = '<a href="'.$url.'" rel="nofollow">'.$title.'</a>'; return $link; }