| @@ 91-117 (lines=27) @@ | ||
| 88 | * @param mixed $value |
|
| 89 | * @return array |
|
| 90 | */ |
|
| 91 | public static function set(&$array, $key, $value) |
|
| 92 | { |
|
| 93 | $key = static::normalizeKey($key); |
|
| 94 | ||
| 95 | if ($key === null || $key === '') |
|
| 96 | { |
|
| 97 | return ($array = $value); |
|
| 98 | } |
|
| 99 | ||
| 100 | $keys = explode('.', $key); |
|
| 101 | $last = array_pop($keys); |
|
| 102 | $currentElement =& $array; |
|
| 103 | ||
| 104 | foreach ($keys as $currentKey) |
|
| 105 | { |
|
| 106 | if (!array_key_exists($currentKey, $currentElement) || !is_array($currentElement[$currentKey])) |
|
| 107 | { |
|
| 108 | $currentElement[$currentKey] = []; |
|
| 109 | } |
|
| 110 | ||
| 111 | $currentElement =& $currentElement[$currentKey]; |
|
| 112 | } |
|
| 113 | ||
| 114 | $currentElement[$last] = $value; |
|
| 115 | ||
| 116 | return $array; |
|
| 117 | } |
|
| 118 | ||
| 119 | /** |
|
| 120 | * Remove the value stored under given key from the array with dot notation support. |
|
| @@ 126-152 (lines=27) @@ | ||
| 123 | * @param string $key |
|
| 124 | * @return bool |
|
| 125 | */ |
|
| 126 | public static function remove(&$array, $key) |
|
| 127 | { |
|
| 128 | $key = static::normalizeKey($key); |
|
| 129 | ||
| 130 | if ($key === null || $key === '') |
|
| 131 | { |
|
| 132 | return ($array = []); |
|
| 133 | } |
|
| 134 | ||
| 135 | $keys = explode('.', $key); |
|
| 136 | $last = array_pop($keys); |
|
| 137 | $currentElement =& $array; |
|
| 138 | ||
| 139 | foreach ($keys as $currentKey) |
|
| 140 | { |
|
| 141 | if (!array_key_exists($currentKey, $currentElement) || !is_array($currentElement[$currentKey])) |
|
| 142 | { |
|
| 143 | $currentElement[$currentKey] = []; |
|
| 144 | } |
|
| 145 | ||
| 146 | $currentElement =& $currentElement[$currentKey]; |
|
| 147 | } |
|
| 148 | ||
| 149 | unset($currentElement[$last]); |
|
| 150 | ||
| 151 | return $array; |
|
| 152 | } |
|
| 153 | ||
| 154 | /** |
|
| 155 | * Flatten a multi-dimensional array into a single level using dot notation. |
|