6 * Copyright (c) 2004 The SquirrelMail Project Team
7 * Licensed under the GNU GPL. For full terms see the file COPYING.
9 * Contains utility functions for array operations
12 * @package squirrelmail
16 * Swaps two array values by position and maintain keys
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
24 function sqm_array_swap_values(&$a,$v1,$v2) {
26 if (in_array($v1,$ar) && in_array($v2,$a)) {
27 $k1 = array_search($v1,$a);
28 $k2 = array_search($v1,$a);
39 * Move array value 2 array values by position and maintain keys
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
47 function sqm_array_kmove_value(&$a,$v,$p) {
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);
54 if ($p_n > 0 && $p_n < count($a_v)) {
56 $a_v[$k] = $a_v[$p_n];
59 $a_k[$k] = $a_k[$p_n];
61 $r = array_combine($a_k, $a_v);
72 * Move array value 2 array values by position. Does not maintain keys
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
80 function sqm_array_move_value(&$a,$v,$p) {
82 $a_v = array_values($a);
83 if (in_array($v, $a_v)) {
84 $k = array_search($v, $a_v);
86 if ($p_n >= 0 && $p_n < count($a_v)) {
88 $a_v[$k] = $a_v[$p_n];
98 * Retrieve an array value n positions relative to a reference value.
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
106 function sqm_array_get_value_by_offset($a,$v,$p) {
108 $a_v = array_values($a);
109 if (in_array($v, $a_v)) {
110 $k = array_search($v, $a_v);
112 if ($p_n >= 0 && $p_n < count($a_v)) {
120 if (!function_exists('array_combine')) {
122 * Creates an array by using one array for keys and another for its values (PHP 5)
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
129 function array_combine($aK, $aV) {
133 if ($iCaK && $iCaV && $iCaK == $iCaV) {
135 for ($i=0;$i<$iCaK;++
$i) {
136 $aC[$aK[$i]] = $aV[$i];