137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeaunamespace ComboStrap; 537748cd8SNickeau 637748cd8SNickeau 737748cd8SNickeauuse DateTime; 837748cd8SNickeau 937748cd8SNickeauclass ArrayUtility 1037748cd8SNickeau{ 1137748cd8SNickeau 1237748cd8SNickeau /** 1337748cd8SNickeau * Print recursively an array as an HTML list 1437748cd8SNickeau * @param array $toPrint 1537748cd8SNickeau * @param string $content - [Optional] - append to this variable if given 1637748cd8SNickeau * @return string - an array as an HTML list or $content if given as variable 1737748cd8SNickeau */ 18c3437056SNickeau public static function formatAsHtmlList(array $toPrint, &$content = ""): string 1937748cd8SNickeau { 2037748cd8SNickeau /** 2137748cd8SNickeau * Sort it on the key 2237748cd8SNickeau */ 2337748cd8SNickeau ksort($toPrint); 2437748cd8SNickeau 2537748cd8SNickeau $content .= '<ul>'; 2637748cd8SNickeau foreach ($toPrint as $key => $value) { 2737748cd8SNickeau if (is_array($value)) { 2837748cd8SNickeau $content .= '<li>' . $key . ' : '; 2937748cd8SNickeau self::formatAsHtmlList($value, $content); 3037748cd8SNickeau $content .= '</li>'; 3137748cd8SNickeau } else { 3237748cd8SNickeau if (preg_match('/date|created|modified/i', $key) && is_numeric($value)) { 33c3437056SNickeau $value = date(DATE_ATOM, $value); 3437748cd8SNickeau } 3537748cd8SNickeau $stringValue = var_export($value, true); 3637748cd8SNickeau $content .= '<li>' . $key . ' : ' . $stringValue . '</li>'; 3737748cd8SNickeau } 3837748cd8SNickeau } 3937748cd8SNickeau $content .= '</ul>'; 4037748cd8SNickeau return $content; 4137748cd8SNickeau } 4237748cd8SNickeau 4337748cd8SNickeau /** 4437748cd8SNickeau * Delete from an array recursively key 4537748cd8SNickeau * that match the regular expression 4637748cd8SNickeau * @param array $array 4737748cd8SNickeau * @param $pattern 4837748cd8SNickeau */ 4937748cd8SNickeau public static function filterArrayByKey(array &$array, $pattern) 5037748cd8SNickeau { 5137748cd8SNickeau foreach ($array as $key => &$value) { 5237748cd8SNickeau if (preg_match('/' . $pattern . '/i', $key)) { 5337748cd8SNickeau unset($array[$key]); 5437748cd8SNickeau } 5537748cd8SNickeau if (is_array($value)) { 5637748cd8SNickeau self::filterArrayByKey($value, $pattern); 5737748cd8SNickeau } 5837748cd8SNickeau } 5937748cd8SNickeau } 6037748cd8SNickeau 6137748cd8SNickeau public static function addIfNotSet(array &$array, $key, $value) 6237748cd8SNickeau { 6337748cd8SNickeau if (!isset($array[$key])) { 6437748cd8SNickeau $array[$key] = $value; 6537748cd8SNickeau } 6637748cd8SNickeau } 6737748cd8SNickeau 6837748cd8SNickeau /** 6937748cd8SNickeau * @param $array 7037748cd8SNickeau * @return int|string|null - the last key of an array 7137748cd8SNickeau * There is a method {@link array_key_last()} but this is only available on 7.3 7237748cd8SNickeau * This function will also reset the internal pointer 7337748cd8SNickeau */ 7437748cd8SNickeau public static function array_key_last(&$array) 7537748cd8SNickeau { 7637748cd8SNickeau // move the internal pointer to the end of the array 7737748cd8SNickeau end($array); 7837748cd8SNickeau $key = key($array); 7937748cd8SNickeau // By default, the pointer is on the first element 8037748cd8SNickeau reset($array); 8137748cd8SNickeau return $key; 8237748cd8SNickeau } 83c3437056SNickeau 84c3437056SNickeau /** 85c3437056SNickeau * @param array $flatArray - the returned flat array 86c3437056SNickeau * @param array|string $value - the value to return as a flat array 87c3437056SNickeau */ 88c3437056SNickeau public static function toFlatArray(array &$flatArray, $value) 89c3437056SNickeau { 90c3437056SNickeau if (is_array($value)) { 91c3437056SNickeau foreach ($value as $subImageValue) { 92c3437056SNickeau self::toFlatArray($flatArray, $subImageValue); 93c3437056SNickeau } 94c3437056SNickeau } else { 95c3437056SNickeau $flatArray[] = $value; 96c3437056SNickeau } 97c3437056SNickeau } 98c3437056SNickeau 99c3437056SNickeau /** 100c3437056SNickeau * @param array $default 101c3437056SNickeau * @param array $overwrite 102c3437056SNickeau * @return array 103c3437056SNickeau */ 104c3437056SNickeau public static function mergeByValue(array $default, array $overwrite): array 105c3437056SNickeau { 106c3437056SNickeau return array_merge($default,$overwrite); 107c3437056SNickeau } 108*04fd306cSNickeau 109*04fd306cSNickeau public static function formatAsString(array $array): string 110*04fd306cSNickeau { 111*04fd306cSNickeau return Json::createFromArray($array)->toPrettyJsonString(); 112*04fd306cSNickeau } 11337748cd8SNickeau} 114