/
php-array-kit.php
101 lines (71 loc) · 1.95 KB
/
php-array-kit.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
/**
*
* Split array base on key
*
*/
function keyi ($array, $key, $gather = false) {
if (! $array)
return ! is_array ($array) ? false : array ();
$ret = array ();
$key = (array) $key;
reset ($array);
$_key = array_shift ($key);
if (isset ($array[0])) {
if (is_array ($array[0])) {
foreach ($array as $v)
! isset ($v[$_key]) or (! $gather ? (! isset ($ret[$v[$_key]]) ? $ret[$v[$_key]] = $v : null) : ($gather === true ? $ret[$v[$_key]][] = $v : $ret[$v[$_key]][$gather] = $v));
}
else if (is_object ($array[0])) {
foreach ($array as $v)
! isset ($v->$_key) or (! $gather ? (! isset ($ret[$v->$_key]) ? $ret[$v->$_key] = $v : null) : ($gather === true ? $ret[$v->$_key][] = $v : $ret[$v->$_key][$gather] = $v));
}
}
else
$ret[$array[$_key]] = $array;
if (isset ($key[0])) {
foreach ($ret as $k => $r)
$ret[$k] = keyi ($r, $key, $gather);
}
return $ret;
}
/**
*
* Dig $key - value from array
*
*/
function dig ($array, $key = false, $deep = 1) {
if (! $array)
return ! is_array ($array) ? false : array ();
$ret = Array ();
$mod = is_object (current ($array)) ? 'o' : 'a';
if ($deep == 1) {
reset ($array);
foreach ($array as $k => $v) {
if ($key && $mod == 'a' && isset ($v[$key]))
$ret[] = $v[$key];
else if ($key && $mod == 'o' && isset ($v->$key))
$ret[] = $v->$key;
else if (! $key)
$ret = array_merge ($ret, $v);
}
return $ret;
}
else {
foreach ($array as $k => $v)
$ret = array_merge ($ret, dig ($v, $key, $deep - 1));
return $ret;
}
}
/**
*
* Object to array
*
*/
function otoa ($val) {
if (is_object ($val))
$val = get_object_vars ($val);
if (is_array ($val))
return array_map (__FUNCTION__, $val);
return $val;
}