array_filter_recursive($array, null, true)

edit | delete

Autor: Varsamis Karamanidis (Macky)

eingetragen: Donnerstag, 16. Mai 2024 um 08:37 Uhr (20/2024 Kalenderwoche)

geändert: Donnerstag, 16. Mai 2024 um 08:37 Uhr (20/2024 Kalenderwoche)

Keywords: array filter recursive

Kategorien: PHP,

Text:

arrayfilterrecursive();



arrayfilterrecursive($array, null, true);


Kommentar von Macky am 15.05.2024:
Die Zeile: if (!$val = $fnc((string)$value))
Hat einen Fehler geworfen, weill striptags() erwartet ein String und bei integer wirft die Funktion jetzt ein Fehler.
Ansonsten hat die Variable $remove
emptyvalues = false nicht richtig gezogen, Entschuldige bitte.
Jetzt kommen die Werte
3 => '0' und 'testNeu' => '', bei remove
emptyvalues = false auch wirklich an, hatte wohl nicht richtig mit false getestet (tut mir leid Ralf)!
Dafür funktioniert jetzt das ctype
digit, ctype_alpha usw. nicht wie ich es will!
Bin aber an der finale Version dran, vielleicht kannst du mir ja morgen helfen wenn ich es nicht hinbekomme?

Quellcode:  

function array_filter_recursive(array $array, mixed $callback = null, bool $remove_empty_values = true): array
    {
        foreach ($array as $key => &$value) { // mind the reference
            if (is_array($value)) {
                $value = array_filter_recursive($value, $callback, $remove_empty_values);
                if ($remove_empty_values && !$value) {
                    unset($array[$key]);
                }
            } elseif (!is_null($callback)) {
                if (is_array($callback)) {
                    foreach ($callback as $fnc) {
                        $value = !str_starts_with((string)$fnc, 'ctype_') ? $value : (string)$value;
                        if (!$val = $fnc((string)$value)) {
                            if ($remove_empty_values) {
                                unset($array[$key]);
                            }
                        } else {
                            $value = ($val !== true) ? $val : $value;
                        }
                    }
                } elseif (!$callback(!str_starts_with($callback, 'ctype_') ? $value : (string)$value)) {
                    unset($array[$key]);
                }
            } elseif ($remove_empty_values && !$value) {
                unset($array[$key]);
            }
        }
        unset($value); // kill the reference
        return $array;
    }