aboutsummaryrefslogtreecommitdiff
path: root/ratatoeskr/sys/utils.php
diff options
context:
space:
mode:
Diffstat (limited to 'ratatoeskr/sys/utils.php')
-rw-r--r--ratatoeskr/sys/utils.php164
1 files changed, 164 insertions, 0 deletions
diff --git a/ratatoeskr/sys/utils.php b/ratatoeskr/sys/utils.php
new file mode 100644
index 0000000..de673aa
--- /dev/null
+++ b/ratatoeskr/sys/utils.php
@@ -0,0 +1,164 @@
+<?php
+/*
+ * File: utils.php
+ *
+ * Various useful helper functions.
+ *
+ * This file is part of Ratatöskr.
+ * Ratatöskr is licensed unter the MIT / X11 License.
+ * See "ratatoeskr/licenses/ratatoeskr" for more information.
+ */
+
+/*
+ * Function: array_repeat
+ *
+ * Parameters:
+ *
+ * $val -
+ * $n -
+ *
+ * Returns:
+ *
+ * An array with $val $n-times repeated.
+ */
+function array_repeat($val, $n)
+{
+ $rv = array();
+ for($i = 1; $i < $n; ++$i)
+ array_push($rv, $val);
+ return $rv;
+}
+
+/*
+ * Function: array_blend
+ *
+ * Blend multiple arrays together.
+ *
+ * Example:
+ *
+ * array_blend(array(1,2,3), array(4,5,6), array(7,8,9));
+ * will return array(1,4,7,2,5,8,3,6,9)
+ */
+function array_blend()
+{
+ $arrays = array_filter(func_get_args(), "is_array");
+
+ switch(count($arrays))
+ {
+ case 0: return array(); break;
+ case 1: return $arrays[0]; break;
+ default:
+ $rv = array();
+ while(array_sum(array_map("count", $arrays)) > 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: 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));
+}
+
+/*
+ * Constant: SITE_BASE_PATH
+ * The Base path of this ratatoeskr site.
+ */
+define(SITE_BASE_PATH, dirname(dirname(dirname(__FILE__))));
+?>