summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Dibb <beandog@gentoo.org>2009-12-15 20:44:20 +0000
committerSteve Dibb <beandog@gentoo.org>2009-12-15 20:44:20 +0000
commit09088aa9aee870ff3e9dc490683976d224a68b4b (patch)
tree99637a9cd8193a2c937a3efd0e09d6726055916a /import.functions.php
downloadznurt-org-backend-09088aa9aee870ff3e9dc490683976d224a68b4b.tar.gz
znurt-org-backend-09088aa9aee870ff3e9dc490683976d224a68b4b.tar.bz2
znurt-org-backend-09088aa9aee870ff3e9dc490683976d224a68b4b.zip
initial commit
git-svn-id: file:///var/svn/portage@1 3218660a-b0cf-4799-a991-8ddcc5b9e0f3
Diffstat (limited to 'import.functions.php')
-rw-r--r--import.functions.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/import.functions.php b/import.functions.php
new file mode 100644
index 0000000..d5407b7
--- /dev/null
+++ b/import.functions.php
@@ -0,0 +1,78 @@
+<?
+
+
+ /**
+ * Create the 'extended version' of the original versions,
+ * which is basically numerical version schemes padded
+ * with zeroes to be able to be sorted numerically.
+ *
+ * @param array indexed array of original versions (pv)
+ * @return array of extended versions with original version as key
+ */
+ function extendVersions($arr) {
+
+ if(!count($arr))
+ return array();
+
+ // Check if we have any dots in versions
+ // If we don't, it's fine as is -- just pad the zeroes
+ if(!(count($arr) && preg_grep('/\./', $arr))) {
+
+ foreach($arr as $value) {
+ $max = max($max, strlen($value));
+ }
+
+ foreach($arr as $key => $value) {
+ $ext[$key] = str_pad($value, $max, 0, STR_PAD_LEFT);
+ }
+
+ return $ext;
+
+ }
+
+ // Keep a count of the max number of version breaks (dots)
+ // array('1.2', '2.12.3') would have a max of 2.
+ $max = 0;
+ foreach($arr as $key => $str) {
+
+ $max = max($max, substr_count($str, '.'));
+ $arr_extended[$key] = explode('.', $str);
+ }
+
+ $max++;
+
+ // Get the max *numerical* lengths for each split
+ // 2.12.3 would create: array(1, 2, 1);
+ foreach($arr_extended as $tmp) {
+ foreach($tmp as $key => $value) {
+ $value = preg_replace('/\D/', '', $value);
+ $arr_max_strlen[$key] = max($arr_max_strlen[$key], strlen($value));
+ }
+ }
+
+ // Now pad everything to the extended version
+ foreach($arr as $key => $value) {
+
+ // Split the version into each of its dot values
+ $explode = explode(".", $value);
+
+ // Pad and/or create the version for each dot version
+ for($x = 0; $x < $max; $x++) {
+
+ // Yes, you *have* to pad the first number too. Otherwise PHP
+ // will compare it wrong if there's more than one decimal point.
+ if($x == 0)
+ $ext[$key] = str_pad($explode[$x], $arr_max_strlen[$x], 0, STR_PAD_LEFT);
+ if($x > 0)
+ $ext[$key] .= ".".str_pad($explode[$x], $arr_max_strlen[$x], 0, STR_PAD_LEFT);
+
+ }
+
+ }
+
+ asort($ext);
+
+ return $ext;
+
+ }
+?> \ No newline at end of file