44 return $this->
find(
$path, $data, $delimiter);
74 if ($this->
find(
$path, $data, $delimiter,
true)) {
93 if ($this->
find(
$path, $data, $delimiter)) {
111 public function move(
$path, $targetPath, array
$data, $overwrite =
false, $delimiter = self::DEFAULT_PATH_DELIMITER)
113 if ($this->
find(
$path, $data, $delimiter)) {
117 if ((!$this->
find($targetPath,
$data, $delimiter) || $overwrite)
118 && $this->
find($targetPath,
$data, $delimiter,
true)
140 if ($this->
find(
$path, $data, $delimiter) && is_array($this->parentNode[$this->nodeIndex])) {
142 $this->parentNode[$this->nodeIndex],
161 $this->
find(
$path, $data, $delimiter,
true);
177 if ($this->
find(
$path, $data, $delimiter)) {
178 unset($this->parentNode[$this->nodeIndex]);
196 if (is_array(
$path)) {
200 if (
$path ===
null) {
204 $currentNode = &
$data;
208 if (!is_array($currentNode)) {
212 if (!array_key_exists(
$index, $currentNode)) {
217 $currentNode[
$index] = [];
220 $this->nodeIndex =
$index;
221 $this->parentNode = &$currentNode;
222 $currentNode = &$currentNode[
$index];
246 $internalPath =
null,
248 $delimiter = self::DEFAULT_PATH_DELIMITER
250 $indexes = (array)$indexes;
251 $startPath = is_array($startPath) ? implode($delimiter, $startPath) : $startPath;
252 $internalPath = is_array($internalPath) ? implode($delimiter, $internalPath) : $internalPath;
253 $data = $startPath !==
null ? $this->
get($startPath,
$data, [], $delimiter) :
$data;
254 $checkList = [$startPath => [
'start' => $startPath ===
null,
'children' =>
$data]];
261 foreach (
$config[
'children'] as $childIndex => $childData) {
262 $childPath =
$path . (!
$config[
'start'] ? $delimiter :
'') . $childIndex;
264 if (in_array($childIndex, $indexes,
true)) {
267 if ($maxResults !==
null && count(
$paths) >= $maxResults) {
272 $searchData = $internalPath !==
null && is_array($childData)
273 ? $this->
get($internalPath, $childData,
null, $delimiter)
276 if (!empty($searchData) && is_array($searchData)) {
277 $searchPath = $childPath . ($internalPath !==
null ? $delimiter . $internalPath :
'');
278 $nextCheckList[$searchPath] = [
'start' =>
false,
'children' => $searchData];
283 $checkList = $nextCheckList;
304 $internalPath =
null,
305 $delimiter = self::DEFAULT_PATH_DELIMITER
322 public function slicePath(
$path, $offset, $length =
null, $delimiter = self::DEFAULT_PATH_DELIMITER)
324 return implode($delimiter, array_slice(explode($delimiter,
$path), $offset, $length));
slicePath($path, $offset, $length=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
merge($path, array $data, array $value, $delimiter=self::DEFAULT_PATH_DELIMITER)
replace($path, array $data, $value, $delimiter=self::DEFAULT_PATH_DELIMITER)
find($path, array &$data, $delimiter, $populate=false)
findPaths( $indexes, array $data, $startPath=null, $internalPath=null, $maxResults=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
const DEFAULT_PATH_DELIMITER
move($path, $targetPath, array $data, $overwrite=false, $delimiter=self::DEFAULT_PATH_DELIMITER)
exists($path, array $data, $delimiter=self::DEFAULT_PATH_DELIMITER)
findPath( $indexes, array $data, $startPath=null, $internalPath=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
populate($path, array $data, $delimiter=self::DEFAULT_PATH_DELIMITER)