Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Data Fields | Protected Member Functions | Protected Attributes
ArrayManager Class Reference

Public Member Functions

 exists ($path, array $data, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 get ($path, array $data, $defaultValue=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 set ($path, array $data, $value, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 replace ($path, array $data, $value, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 move ($path, $targetPath, array $data, $overwrite=false, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 merge ($path, array $data, array $value, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 populate ($path, array $data, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 remove ($path, array $data, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 findPaths ( $indexes, array $data, $startPath=null, $internalPath=null, $maxResults=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 findPath ( $indexes, array $data, $startPath=null, $internalPath=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
 
 slicePath ($path, $offset, $length=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
 

Data Fields

const DEFAULT_PATH_DELIMITER = '/'
 

Protected Member Functions

 find ($path, array &$data, $delimiter, $populate=false)
 

Protected Attributes

 $parentNode
 
 $nodeIndex
 

Detailed Description

Provides methods for nested array manipulations

@api

Since
100.1.0

Definition at line 14 of file ArrayManager.php.

Member Function Documentation

◆ exists()

exists (   $path,
array  $data,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Check if node exists

Parameters
array | string$path
array$data
string$delimiter
Returns
bool
Since
100.1.0

Definition at line 42 of file ArrayManager.php.

43  {
44  return $this->find($path, $data, $delimiter);
45  }
find($path, array &$data, $delimiter, $populate=false)

◆ find()

find (   $path,
array &  $data,
  $delimiter,
  $populate = false 
)
protected

Finds node in nested array and saves its index and parent node reference

Parameters
array | string$path
array$data
string$delimiter
bool$populate
Returns
bool
Since
100.1.0

Definition at line 194 of file ArrayManager.php.

195  {
196  if (is_array($path)) {
197  $path = implode($delimiter, $path);
198  }
199 
200  if ($path === null) {
201  return false;
202  }
203 
204  $currentNode = &$data;
205  $path = explode($delimiter, $path);
206 
207  foreach ($path as $index) {
208  if (!is_array($currentNode)) {
209  return false;
210  }
211 
212  if (!array_key_exists($index, $currentNode)) {
213  if (!$populate) {
214  return false;
215  }
216 
217  $currentNode[$index] = [];
218  }
219 
220  $this->nodeIndex = $index;
221  $this->parentNode = &$currentNode;
222  $currentNode = &$currentNode[$index];
223  }
224 
225  return true;
226  }
$index
Definition: list.phtml:44

◆ findPath()

findPath (   $indexes,
array  $data,
  $startPath = null,
  $internalPath = null,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Get first matching path for elements with specified indexes

Parameters
array | mixed$indexes
array$data
string | array | null$startPath
string | array | null$internalPath
string$delimiter
Returns
string|null
Since
100.1.0

Definition at line 300 of file ArrayManager.php.

306  {
307  $paths = $this->findPaths($indexes, $data, $startPath, $internalPath, 1, $delimiter);
308 
309  return $paths ? reset($paths) : null;
310  }
findPaths( $indexes, array $data, $startPath=null, $internalPath=null, $maxResults=null, $delimiter=self::DEFAULT_PATH_DELIMITER)
$paths
Definition: _bootstrap.php:83

◆ findPaths()

findPaths (   $indexes,
array  $data,
  $startPath = null,
  $internalPath = null,
  $maxResults = null,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Get matching paths for elements with specified indexes

Parameters
array | mixed$indexes
array$data
string | array | null$startPath
string | array | null$internalPath
int | null$maxResults
string$delimiter
Returns
array @SuppressWarnings(PHPMD.CyclomaticComplexity) @SuppressWarnings(PHPMD.NPathComplexity)
Since
100.1.0

Definition at line 242 of file ArrayManager.php.

249  {
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]];
255  $paths = [];
256 
257  while ($checkList) {
258  $nextCheckList = [];
259 
260  foreach ($checkList as $path => $config) {
261  foreach ($config['children'] as $childIndex => $childData) {
262  $childPath = $path . (!$config['start'] ? $delimiter : '') . $childIndex;
263 
264  if (in_array($childIndex, $indexes, true)) {
265  $paths[] = $childPath;
266 
267  if ($maxResults !== null && count($paths) >= $maxResults) {
268  return $paths;
269  }
270  }
271 
272  $searchData = $internalPath !== null && is_array($childData)
273  ? $this->get($internalPath, $childData, null, $delimiter)
274  : $childData;
275 
276  if (!empty($searchData) && is_array($searchData)) {
277  $searchPath = $childPath . ($internalPath !== null ? $delimiter . $internalPath : '');
278  $nextCheckList[$searchPath] = ['start' => false, 'children' => $searchData];
279  }
280  }
281  }
282 
283  $checkList = $nextCheckList;
284  }
285 
286  return $paths;
287  }
$config
Definition: fraud_order.php:17
$paths
Definition: _bootstrap.php:83

◆ get()

get (   $path,
array  $data,
  $defaultValue = null,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Retrieve node

Parameters
array | string$path
array$data
null$defaultValue
string$delimiter
Returns
mixed|null
Since
100.1.0

Definition at line 57 of file ArrayManager.php.

58  {
59  return $this->find($path, $data, $delimiter) ? $this->parentNode[$this->nodeIndex] : $defaultValue;
60  }
find($path, array &$data, $delimiter, $populate=false)

◆ merge()

merge (   $path,
array  $data,
array  $value,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Merge value with node and return modified data

Parameters
array | string$path
array$data
array$value
string$delimiter
Returns
array
Since
100.1.0

Definition at line 138 of file ArrayManager.php.

139  {
140  if ($this->find($path, $data, $delimiter) && is_array($this->parentNode[$this->nodeIndex])) {
141  $this->parentNode[$this->nodeIndex] = array_replace_recursive(
142  $this->parentNode[$this->nodeIndex],
143  $value
144  );
145  }
146 
147  return $data;
148  }
find($path, array &$data, $delimiter, $populate=false)
$value
Definition: gender.phtml:16

◆ move()

move (   $path,
  $targetPath,
array  $data,
  $overwrite = false,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Move value from one location to another

Parameters
array | string$path
string$targetPath
array$data
bool$overwrite
string$delimiter
Returns
array
Since
100.1.0

Definition at line 111 of file ArrayManager.php.

112  {
113  if ($this->find($path, $data, $delimiter)) {
116 
117  if ((!$this->find($targetPath, $data, $delimiter) || $overwrite)
118  && $this->find($targetPath, $data, $delimiter, true)
119  ) {
120  $this->parentNode[$this->nodeIndex] = $parentNode[$nodeIndex];
121  unset($parentNode[$nodeIndex]);
122  }
123  }
124 
125  return $data;
126  }
find($path, array &$data, $delimiter, $populate=false)

◆ populate()

populate (   $path,
array  $data,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Populate nested array if possible and needed

Parameters
array | string$path
array$data
string$delimiter
Returns
array
Since
100.1.0

Definition at line 159 of file ArrayManager.php.

160  {
161  $this->find($path, $data, $delimiter, true);
162 
163  return $data;
164  }
find($path, array &$data, $delimiter, $populate=false)

◆ remove()

remove (   $path,
array  $data,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Remove node and return modified data

Parameters
array | string$path
array$data
string$delimiter
Returns
array
Since
100.1.0

Definition at line 175 of file ArrayManager.php.

176  {
177  if ($this->find($path, $data, $delimiter)) {
178  unset($this->parentNode[$this->nodeIndex]);
179  }
180 
181  return $data;
182  }
find($path, array &$data, $delimiter, $populate=false)

◆ replace()

replace (   $path,
array  $data,
  $value,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Set value into existing node and return modified data

Parameters
array | string$path
array$data
mixed$value
string$delimiter
Returns
array
Since
100.1.0

Definition at line 91 of file ArrayManager.php.

92  {
93  if ($this->find($path, $data, $delimiter)) {
94  $this->parentNode[$this->nodeIndex] = $value;
95  }
96 
97  return $data;
98  }
find($path, array &$data, $delimiter, $populate=false)
$value
Definition: gender.phtml:16

◆ set()

set (   $path,
array  $data,
  $value,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Set value into node and return modified data

Parameters
array | string$path
array$data
mixed$value
string$delimiter
Returns
array
Since
100.1.0

Definition at line 72 of file ArrayManager.php.

73  {
74  if ($this->find($path, $data, $delimiter, true)) {
75  $this->parentNode[$this->nodeIndex] = $value;
76  }
77 
78  return $data;
79  }
find($path, array &$data, $delimiter, $populate=false)
$value
Definition: gender.phtml:16

◆ slicePath()

slicePath (   $path,
  $offset,
  $length = null,
  $delimiter = self::DEFAULT_PATH_DELIMITER 
)

Retrieve slice of specified path

Parameters
string$path
int$offset
int | null$length
string$delimiter
Returns
string
Since
100.1.0

Definition at line 322 of file ArrayManager.php.

323  {
324  return implode($delimiter, array_slice(explode($delimiter, $path), $offset, $length));
325  }

Field Documentation

◆ $nodeIndex

$nodeIndex
protected

Definition at line 31 of file ArrayManager.php.

◆ $parentNode

$parentNode
protected

Definition at line 25 of file ArrayManager.php.

◆ DEFAULT_PATH_DELIMITER

const DEFAULT_PATH_DELIMITER = '/'

Default node delimiter for path

Definition at line 19 of file ArrayManager.php.


The documentation for this class was generated from the following file: