This repository was archived by the owner on Oct 14, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathAccessHelper.php
More file actions
118 lines (101 loc) · 3.3 KB
/
AccessHelper.php
File metadata and controls
118 lines (101 loc) · 3.3 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
namespace Flow\JSONPath;
class AccessHelper
{
public static function collectionKeys($collection)
{
if (is_object($collection)) {
return array_keys(get_object_vars($collection));
} else {
return array_keys($collection);
}
}
public static function isCollectionType($collection)
{
return is_array($collection) || is_object($collection);
}
public static function keyExists($collection, $key, $magicIsAllowed = false)
{
if ($magicIsAllowed && is_object($collection) && method_exists($collection, '__get')) {
return true;
}
if (is_int($key) && $key < 0) {
$key = abs((int)$key);
}
if (is_array($collection) || $collection instanceof \ArrayAccess) {
return array_key_exists($key, $collection);
} else if (is_object($collection)) {
return property_exists($collection, $key);
}
return false;
}
public static function getValue($collection, $key, $magicIsAllowed = false)
{
if ($magicIsAllowed && is_object($collection) && method_exists($collection, '__get') && !$collection instanceof \ArrayAccess) {
return $collection->__get($key);
}
if (is_object($collection) && !$collection instanceof \ArrayAccess) {
return $collection->$key;
}
if (is_array($collection)) {
if (is_int($key)) {
return array_slice($collection, $key, 1, false)[0];
} else {
return $collection[$key];
}
}
if (is_object($collection) && !$collection instanceof \ArrayAccess) {
return $collection->$key;
}
/*
* Find item in php collection by index
* Written this way to handle instances ArrayAccess or Traversable objects
*/
if (is_int($key)) {
$i = 0;
foreach ($collection as $val) {
if ($i === $key) {
return $val;
}
$i += 1;
}
if ($key < 0) {
$total = $i;
$i = 0;
foreach ($collection as $val) {
if ($i - $total === $key) {
return $val;
}
$i += 1;
}
}
}
// Finally, try anything
return $collection[$key];
}
public static function setValue(&$collection, $key, $value)
{
if (is_object($collection) && ! $collection instanceof \ArrayAccess) {
return $collection->$key = $value;
} else {
return $collection[$key] = $value;
}
}
public static function unsetValue(&$collection, $key)
{
if (is_object($collection) && ! $collection instanceof \ArrayAccess) {
unset($collection->$key);
} else {
unset($collection[$key]);
}
}
public static function arrayValues($collection)
{
if (is_array($collection)) {
return array_values($collection);
} else if (is_object($collection)) {
return array_values((array) $collection);
}
throw new JSONPathException("Invalid variable type for arrayValues");
}
}