xref: /plugin/combo/ComboStrap/ArrayUtility.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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