Mam następujący kod:
function lower_than_10($i) {
return ($i < 10);
}
których mogę użyć do filtrowania tablicy takiej jak ta:
$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');
Jak mogę dodać argumenty do lower_than_10, aby akceptował również liczbę do sprawdzenia? Na przykład, jeśli mam to:
function lower_than($i, $num) {
return ($i < $num);
}
jak to nazwać z array_filter, przekazując 10 do $ num lub jakąkolwiek liczbę?
array_filter
? To po prostucallable
; w powyższym przypadku dopasowanie „Typ 3: Wywołanie metody obiektu”array(<instance>, <method-name>)
:, por. PHP: Callbacks / Callables - Manual .jeśli używasz php 5.3 i nowszych, możesz użyć zamknięcia, aby uprościć swój kod:
źródło
use
słowa, aby nadać lambdzie dodatkowe parametry. Dzięki za tak cenną wskazówkę! :)W PHP 5.3 lub nowszym możesz użyć zamknięcia :
źródło
create_function()
.create_function()
ma w zasadzieeval()
inne imię i jest równie zła. Używanie go powinno być odradzane. Zwariowane obejście oparte na klasach podane w zaakceptowanej odpowiedzi jest lepszym rozwiązaniem niż użyciecreate_function()
w tym przypadku.jeśli potrzebujesz wielu parametrów do przekazania do funkcji, możesz dołączyć je do instrukcji use za pomocą ",":
źródło
W uzupełnieniu do odpowiedzi jensgram możesz dodać więcej magii za pomocą
__invoke()
magicznej metody.To pozwoli ci to zrobić
źródło
Pozwala to filtrować elementy w tablicach wielowymiarowych:
źródło