Jaka jest wartość domyślna dla callback argument array_filter Funkcja?

Niech wyobrażamy sobie tablicę:

$input = [
    "Required field" => true
    "Please, enter a number" => false
];

Zwykle używam array_filter bez wyraźnego ustawienia parametru callback, jak array_filter( $input) i ta funkcja zwróci następującą tablicę:

$input = [
    "Required field" => true
];

Ale teraz muszę dokładnie ustawić callback argument. Więc kiedy wysyłam null jako wywołanie funkcji Niniejsze funkcje Powrót null i "Nie pusta" wartość ("Wymagane pole" = & GT; true) jest ignorowane, co nie chciałem.

Oczywiście mogę zadzwonić do funkcji z funkcją własnej wywołania zwrotnego, tak jak:

array_filter( $input, fn($item) => !empty($item) )

Ale miałem nadzieję na bardziej elegancki sposób

-1
Urmat Zhenaliev 22 listopad 2020, 16:25

1 odpowiedź

Najlepsza odpowiedź

Jeśli kod źródłowy array_filter zawiera drugi parametr, jest sprawdzany, czy jest to prawdziwa funkcja wywołana. Łańcuch można również przekazywać. Ale nawet wtedy sprawdzane jest, czy jest to prawdziwa funkcja.

Wariant 1: Zdefiniuj funkcję, a następnie użyj jego nazwy

function isNotEmpty($val){
  return !empty($val);
}

$arr = [0,1,[],null,false,"a","",(object)[],-1];

$res = array_filter( $arr);
$res1 = array_filter( $arr, 'isNotEmpty');
    
var_dump($res === $res1); //bool(true)

Wariant 2: Użyj Donoval Funkcja

$arr = [0,1,[],null,false,"a","",(object)[],-1];

$res = array_filter( $arr);
$res1 = array_filter( $arr, 'boolval');

var_dump($res === $res1);  //bool(true)

Dzięki funkcji Bovarar () to działa również najwyraźniej. Jednak Manual PHP mówi:

Var Wartość scalar konwertowana na bool.

Ale przykłady funkcji booldów pokazują również pustą tablicę jako wartość.

1
jspit 22 listopad 2020, 15:21