array_filter_recursive($array, null, true)
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 $removeemptyvalues = false nicht richtig gezogen, Entschuldige bitte.
Jetzt kommen die Werte
3 => '0' und 'testNeu' => '', bei removeemptyvalues = false auch wirklich an, hatte wohl nicht richtig mit false getestet (tut mir leid Ralf)!
Dafür funktioniert jetzt das ctypedigit, 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;
}