1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeau 4*37748cd8SNickeaunamespace ComboStrap; 5*37748cd8SNickeau 6*37748cd8SNickeau 7*37748cd8SNickeauuse DateTime; 8*37748cd8SNickeau 9*37748cd8SNickeauclass ArrayUtility 10*37748cd8SNickeau{ 11*37748cd8SNickeau 12*37748cd8SNickeau /** 13*37748cd8SNickeau * Print recursively an array as an HTML list 14*37748cd8SNickeau * @param array $toPrint 15*37748cd8SNickeau * @param string $content - [Optional] - append to this variable if given 16*37748cd8SNickeau * @return string - an array as an HTML list or $content if given as variable 17*37748cd8SNickeau */ 18*37748cd8SNickeau public static function formatAsHtmlList(array $toPrint, &$content = "") 19*37748cd8SNickeau { 20*37748cd8SNickeau /** 21*37748cd8SNickeau * Sort it on the key 22*37748cd8SNickeau */ 23*37748cd8SNickeau ksort($toPrint); 24*37748cd8SNickeau 25*37748cd8SNickeau $content .= '<ul>'; 26*37748cd8SNickeau foreach ($toPrint as $key => $value) { 27*37748cd8SNickeau if (is_array($value)) { 28*37748cd8SNickeau $content .= '<li>' . $key . ' : '; 29*37748cd8SNickeau self::formatAsHtmlList($value, $content); 30*37748cd8SNickeau $content .= '</li>'; 31*37748cd8SNickeau } else { 32*37748cd8SNickeau if (preg_match('/date|created|modified/i', $key) && is_numeric($value)) { 33*37748cd8SNickeau $value = date(DateTime::ISO8601, $value); 34*37748cd8SNickeau } 35*37748cd8SNickeau $stringValue = var_export($value, true); 36*37748cd8SNickeau $content .= '<li>' . $key . ' : ' . $stringValue . '</li>'; 37*37748cd8SNickeau } 38*37748cd8SNickeau } 39*37748cd8SNickeau $content .= '</ul>'; 40*37748cd8SNickeau return $content; 41*37748cd8SNickeau } 42*37748cd8SNickeau 43*37748cd8SNickeau /** 44*37748cd8SNickeau * Delete from an array recursively key 45*37748cd8SNickeau * that match the regular expression 46*37748cd8SNickeau * @param array $array 47*37748cd8SNickeau * @param $pattern 48*37748cd8SNickeau */ 49*37748cd8SNickeau public static function filterArrayByKey(array &$array, $pattern) 50*37748cd8SNickeau { 51*37748cd8SNickeau foreach ($array as $key => &$value) { 52*37748cd8SNickeau if (preg_match('/' . $pattern . '/i', $key)) { 53*37748cd8SNickeau unset($array[$key]); 54*37748cd8SNickeau } 55*37748cd8SNickeau if (is_array($value)) { 56*37748cd8SNickeau self::filterArrayByKey($value, $pattern); 57*37748cd8SNickeau } 58*37748cd8SNickeau } 59*37748cd8SNickeau } 60*37748cd8SNickeau 61*37748cd8SNickeau public static function addIfNotSet(array &$array, $key, $value) 62*37748cd8SNickeau { 63*37748cd8SNickeau if (!isset($array[$key])) { 64*37748cd8SNickeau $array[$key] = $value; 65*37748cd8SNickeau } 66*37748cd8SNickeau } 67*37748cd8SNickeau 68*37748cd8SNickeau /** 69*37748cd8SNickeau * @param $array 70*37748cd8SNickeau * @return int|string|null - the last key of an array 71*37748cd8SNickeau * There is a method {@link array_key_last()} but this is only available on 7.3 72*37748cd8SNickeau * This function will also reset the internal pointer 73*37748cd8SNickeau */ 74*37748cd8SNickeau public static function array_key_last(&$array) 75*37748cd8SNickeau { 76*37748cd8SNickeau // move the internal pointer to the end of the array 77*37748cd8SNickeau end($array); 78*37748cd8SNickeau $key = key($array); 79*37748cd8SNickeau // By default, the pointer is on the first element 80*37748cd8SNickeau reset($array); 81*37748cd8SNickeau return $key; 82*37748cd8SNickeau } 83*37748cd8SNickeau} 84