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