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 */ 18*c3437056SNickeau 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)) { 33*c3437056SNickeau $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 } 83*c3437056SNickeau 84*c3437056SNickeau /** 85*c3437056SNickeau * @param array $flatArray - the returned flat array 86*c3437056SNickeau * @param array|string $value - the value to return as a flat array 87*c3437056SNickeau */ 88*c3437056SNickeau public static function toFlatArray(array &$flatArray, $value) 89*c3437056SNickeau { 90*c3437056SNickeau if (is_array($value)) { 91*c3437056SNickeau foreach ($value as $subImageValue) { 92*c3437056SNickeau self::toFlatArray($flatArray, $subImageValue); 93*c3437056SNickeau } 94*c3437056SNickeau } else { 95*c3437056SNickeau $flatArray[] = $value; 96*c3437056SNickeau } 97*c3437056SNickeau } 98*c3437056SNickeau 99*c3437056SNickeau /** 100*c3437056SNickeau * @param array $default 101*c3437056SNickeau * @param array $overwrite 102*c3437056SNickeau * @return array 103*c3437056SNickeau */ 104*c3437056SNickeau public static function mergeByValue(array $default, array $overwrite): array 105*c3437056SNickeau { 106*c3437056SNickeau return array_merge($default,$overwrite); 107*c3437056SNickeau } 10837748cd8SNickeau} 109