Array utility functions. I use them in options_order.php (commit later) and I'm going...
[squirrelmail.git] / functions / arrays.php
CommitLineData
87b256e2 1<?php
2
3/**
4 * arrays.php
5 *
6 * Copyright (c) 2004 The SquirrelMail Project Team
7 * Licensed under the GNU GPL. For full terms see the file COPYING.
8 *
9 * Contains utility functions for array operations
10 *
11 * @version $Id$
12 * @package squirrelmail
13 */
14
15 /**
16 * Swaps two array values by position and maintain keys
17 *
18 * @param array $a (recursive) array
19 * @param mixed $v1 value 1
20 * @param mixed $v2 value 2
21 * @return bool $r true on success
22 * @author Marc Groot Koerkamp
23 */
24 function sqm_array_swap_values(&$a,$v1,$v2) {
25 $r = false;
26 if (in_array($v1,$ar) && in_array($v2,$a)) {
27 $k1 = array_search($v1,$a);
28 $k2 = array_search($v1,$a);
29 $d = $a[$k1];
30 $a[$k1] = $a[$k2];
31 $a[$k2] = $d;
32 $r = true;
33 }
34 return $r;
35 }
36
37
38 /**
39 * Move array value 2 array values by position and maintain keys
40 *
41 * @param array $a (recursive) array
42 * @param mixed $v value to move
43 * @param int $p positions to move
44 * @return bool $succes
45 * @author Marc Groot Koerkamp
46 */
47function sqm_array_kmove_value(&$a,$v,$p) {
48 $r = false;
49 $a_v = array_values($a);
50 $a_k = array_keys($a);
51 if (in_array($v, $a_v)) {
52 $k = array_search($v, $a_v);
53 $p_n = $k + $p;
54 if ($p_n > 0 && $p_n < count($a_v)) {
55 $d = $a_v[$k];
56 $a_v[$k] = $a_v[$p_n];
57 $a_v[$p_n] = $d;
58 $d = $a_k[$k];
59 $a_k[$k] = $a_k[$p_n];
60 $a_k[$p_n] = $d;
61 $r = array_combine($a_k, $a_v);
62 if ($a !== false) {
63 $a = $r;
64 $r = true;
65 }
66 }
67 }
68 return $r;
69}
70
71 /**
72 * Move array value 2 array values by position. Does not maintain keys
73 *
74 * @param array $a (recursive) array
75 * @param mixed $v value to move
76 * @param int $p positions to move
77 * @return bool $succes
78 * @author Marc Groot Koerkamp
79 */
80function sqm_array_move_value(&$a,$v,$p) {
81 $r = false;
82 $a_v = array_values($a);
83 if (in_array($v, $a_v)) {
84 $k = array_search($v, $a_v);
85 $p_n = $k + $p;
86 if ($p_n >= 0 && $p_n < count($a_v)) {
87 $d = $a_v[$k];
88 $a_v[$k] = $a_v[$p_n];
89 $a_v[$p_n] = $d;
90 $a = $a_v;
91 $r = true;
92 }
93 }
94 return $r;
95}
96
97 /**
98 * Retrieve an array value n positions relative to a reference value.
99 *
100 * @param array $a array
101 * @param mixed $v reference value
102 * @param int $p offset to reference value in positions
103 * @return mixed $r false on failure (or if the found value is false)
104 * @author Marc Groot Koerkamp
105 */
106function sqm_array_get_value_by_offset($a,$v,$p) {
107 $r = false;
108 $a_v = array_values($a);
109 if (in_array($v, $a_v)) {
110 $k = array_search($v, $a_v);
111 $p_n = $k + $p;
112 if ($p_n >= 0 && $p_n < count($a_v)) {
113 $r = $a_v[$p_n];
114 }
115 }
116 return $r;
117}
118
119
120if (!function_exists('array_combine')) {
121 /**
122 * Creates an array by using one array for keys and another for its values (PHP 5)
123 *
124 * @param array $aK array keys
125 * @param array $aV array values
126 * @return mixed $r combined array on succes, false on failure
127 * @author Marc Groot Koerkamp
128 */
129 function array_combine($aK, $aV) {
130 $r = false;
131 $iCaK = count($aK);
132 $iCaV = count($aV);
133 if ($iCaK && $iCaV && $iCaK == $iCaV) {
134 $aC = array();
135 for ($i=0;$i<$iCaK;++$i) {
136 $aC[$aK[$i]] = $aV[$i];
137 }
138 $r = $aC;
139 }
140 return $r;
141 }
142}