🎉 initial commit
This commit is contained in:
82
classes/Application/Helper/ArrayPath.php
Normal file
82
classes/Application/Helper/ArrayPath.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Helper;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Return data from a nested array by providing a path. The parts of the path are seperated by commas.
|
||||
*
|
||||
* Examples: 'this.is.a.path' | 'root-node'
|
||||
*/
|
||||
class ArrayPath {
|
||||
|
||||
/**
|
||||
* Return array data by given paths.
|
||||
*
|
||||
* Accepts no key (return all data) or a string (one specific data) or array (returns multiple data).
|
||||
*
|
||||
* @throws Exception|Exception
|
||||
*/
|
||||
public static function GetDataFromArray(array $array, mixed $key = null): mixed {
|
||||
if (!$key) {
|
||||
return $array;
|
||||
}
|
||||
|
||||
if (is_string($key) and strpos($key, '.')) {
|
||||
return self::getArrayDataByPath($array, $key);
|
||||
}
|
||||
|
||||
if (is_string($key) and array_key_exists($key, $array)) {
|
||||
return $array[$key];
|
||||
}
|
||||
|
||||
if (is_array($key)) {
|
||||
return self::GetMultipleData($array, $key);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data from a nested array by providing a path.
|
||||
*
|
||||
* @param string|array $data array to search the data on (haystack)
|
||||
* @param string|array $path path(s) with dot-seperated parts (needle(s))
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private static function getArrayDataByPath(mixed $data, string|array $path): mixed {
|
||||
if (is_string($path)) {
|
||||
$path = explode('.', $path);
|
||||
}
|
||||
|
||||
if (count($path) === 0) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
$key = array_shift($path);
|
||||
|
||||
return isset($data[$key]) ? self::getArrayDataByPath($data[$key], $path) : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return multiple data by providing an array of desired keys and not just one as a string.
|
||||
*
|
||||
* @param array $data Haystack
|
||||
* @param array $key Needles
|
||||
*
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
private static function GetMultipleData(array $data, array $key): array {
|
||||
$return = array();
|
||||
|
||||
foreach ($key as $key_value) {
|
||||
$return[$key_value] = self::GetDataFromArray($data, $key_value);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user