0) { for($i = 0; $i < count($arrays); ++$i) { $val = array_shift($arrays[$i]); if($val === NULL) continue; array_push($rv, $val); } } return $rv; break; } } /* * Function: array_filter_empty * * Filters all empty elements out of an array. * * Parameters: * * $input - The input array * * Returns: * * The $input without its empty elements. */ function array_filter_empty($input) { return array_filter($input, function($x){return !empty($x);}); } /* * Function: array_filter_keys * * Like PHPs `array_filter`, but callback will get the key, not the value of the array element. */ function array_filter_keys($input, $callback) { if(!is_array($input)) throw new InvalidArgumentException("Argument 1 must be an array"); if(empty($input)) return array(); $delete_keys = array_filter(array_keys($input), function ($x) use ($callback) { return !$callback($x);}); foreach($delete_keys as $key) unset($input[$key]); return $input; } /* * Function: array_kvpairs_to_assoc * Convert array of key-value pairs to an associative array. * * Parameters: * $input - Array of key-value pairs * * Returns: * An associative array. */ function array_kvpairs_to_assoc($input) { $rv = array(); foreach($input as $kvpair) $rv[$kvpair[0]] = $kvpair[1]; return $rv; } /* * Function: intcmp * Compare integers (equavilent to strcmp) */ function intcmp($a, $b) { return ($a == $b) ? 0 : (($a < $b) ? -1 : 1); } /* * Function: ucount * * Count elements of an array matching unser-defined rules. * * Parameters: * $array - The input array. * $callback - A callback function. It will be called with the current value as the only parameter. The value is counted, if callback returns TRUE. * * Returns: * * Number of elements where $callback returned TRUE. */ function ucount($array, $callback) { return count(array_filter($array, $callback)); } /* * Function: vcount * * Counts how often $value appears in $array. * * Parameters: * * $array - * $value - * * Returns: * * How often $value appears in $array. */ function vcount($array, $value) { return ucount($array, function($x){return $x===$value;}); } /* * Function: self_url * * Gets current URL. * * From: http://dev.kanngard.net/Permalinks/ID_20050507183447.html */ function self_url() { $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; } function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); } /* * Function: htmlesc * Escape HTML (shorter than htmlentities($text, ENT_QUOTES, "UTF-8")) * * Parameters: * $text - Input text. * * Returns: * HTML */ function htmlesc($text) { return htmlentities($text, ENT_QUOTES, "UTF-8"); } /* * Function: delete_directory * Delete a directory and all of its content. */ function delete_directory($dir) { $dir_content = scandir($dir); foreach($dir_content as $f) { if(($f == "..") or ($f == ".")) continue; $f = "$dir/$f"; if(is_dir($f)) delete_directory($f); else unlink($f); } rmdir($dir); } /* * Constant: SITE_BASE_PATH * The Base path of this ratatoeskr site. */ define("SITE_BASE_PATH", dirname(dirname(dirname(__FILE__)))); ?>