X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FArray.php;h=f4938febf89bfe95ae21931c55d724e10b18a98b;hb=573259db1e67655fe25124c130a28687f562c33b;hp=089ab662052e60dc9ffdc2ddb499a3abb061fafb;hpb=8fe53786227c099fa18725227248b4a335c978b4;p=civicrm-core.git diff --git a/CRM/Utils/Array.php b/CRM/Utils/Array.php index 089ab66205..f4938febf8 100644 --- a/CRM/Utils/Array.php +++ b/CRM/Utils/Array.php @@ -1152,4 +1152,65 @@ class CRM_Utils_Array { return NULL; } + /** + * Check if a key isset which may be several layers deep. + * + * This is a helper for when the calling function does not know how many layers deep the + * path array is so cannot easily check. + * + * @param array $array + * @param array $path + * @return bool + * @throws \CRM_Core_Exception + */ + public static function recursiveIsset($array, $path) { + foreach ($path as $key) { + if (!is_array($array) || !isset($array[$key])) { + return FALSE; + } + $array = $array[$key]; + } + return TRUE; + } + + /** + * Check if a key isset which may be several layers deep. + * + * This is a helper for when the calling function does not know how many layers deep the + * path array is so cannot easily check. + * + * @param array $array + * @param array $path + * An array of keys - e.g [0, 'bob', 8] where we want to check if $array[0]['bob'][8] + * @param mixed $default + * Value to return if not found. + * @return bool + * @throws \CRM_Core_Exception + */ + public static function recursiveValue($array, $path, $default = NULL) { + foreach ($path as $key) { + if (!is_array($array) || !isset($array[$key])) { + return $default; + } + $array = $array[$key]; + } + return $array; + } + + /** + * Append the value to the array using the key provided. + * + * e.g if value is 'llama' & path is [0, 'email', 'location'] result will be + * [0 => ['email' => ['location' => 'llama']] + * + * @param $path + * @param $value + * + * @return array + */ + public static function recursiveBuild($path, $value) { + $arrayKey = array_shift($path); + return [$arrayKey => (empty($path) ? $value : self::recursiveBuild($path, $value))]; + } + }