array_filter - Filtruje elementy tablicy przy użyciu funkcji oddzwanianiaPHP array_filter, jak zdobyć klucz w callbacku?
tablica array_filter (array $ input [, callback $ callback])
Czy callback dostać klucz bieżącej wartości tablicy i jak ?
array_filter - Filtruje elementy tablicy przy użyciu funkcji oddzwanianiaPHP array_filter, jak zdobyć klucz w callbacku?
tablica array_filter (array $ input [, callback $ callback])
Czy callback dostać klucz bieżącej wartości tablicy i jak ?
Można użyć funkcji array_walk jak omówiono tutaj (3rd odpowiedź w dół): is it possible if callback in array_filter receive parameter?
W poprzednim komentarzu ty przedstawionym jesteś rzeczywiście patrząc na coś takiego:
foreach ($t as $k => $v)
if (!array_key_exists($k, $valid))
unset($t[$k])
Więc rzeczywiście usuń wszystkie wartości z tablicy $t
, które nie mają klucza w tablicy $valid
.
Funkcja PHP nazywa się array_intersect_key
. Przecięcie jest równa przefiltrowanej wyniku:
$filtered = array_intersect_key($t, $valid);
Nie ma mowy, aby pozwolić oddzwanianie array_filter
dostępu kluczowego elementu, ani czy istnieje podobna funkcja, która robi to, co chcesz.
Można jednak napisać własną funkcję do tego, jak poniżej:
function arrayfilter(array $array, callable $callback = null) {
if ($callback == null) {
$callback = function($key, $val) {
return (bool) $val;
};
}
$return = array();
foreach ($array as $key => $val) {
if ($callback($key, $val)) {
$return[$key] = $val;
}
}
return $return;
}
$test_array = array('foo', 'a' => 'the a', 'b' => 'the b', 11 => 1101, '', null, false, 0);
$array = arrayfilter($test_array, function($key, $val) {
return is_string($key);
});
print_r($array);
/*
Array
(
[a] => the a
[b] => the b
)
*/
$array = arrayfilter($test_array);
print_r($array);
/*
Array
(
[0] => foo
[a] => the a
[b] => the b
[11] => 1101
)
*/
mi się nie podoba inne opcje proponowane tutaj, jeśli ktoś szuka tej funkcji, jest tutaj szybka realizacja:
function array_filter_keys($a, $c){
$i=array_filter(array_keys($a), $c);
return array_intersect_key($a, array_flip($i));
}
efektem tej funkcji jest dokładnie to, co brzmi jak, zwróci tablicę filtrowany przez funkcję zwrotną, która odbiera raczej klawiszy niż wartości.
EDYTOWANIE: Jest to bardziej zrzeczenie się, po przeczytaniu kilku innych komentarzy, zdaję sobie sprawę, że OP faktycznie szuka tylko array_intersect
, jak wskazał hakre. Zostawię tę odpowiedź tutaj chociaż ponieważ kwestia PO nie wyraźnie stwierdzić, że potrzeby i ta strona pojawia się w Google dla array_filter_keys
Z dokumentacji: PHP 5.6.0 Dodano parametr opcjonalny flagi i stałe ARRAY_FILTER_USE_KEY i ARRAY_FILTER_USE_BOTH
Zbyt trudne i pracuję z tablicami indeksowanymi, które nie są skojarzone. W tym rozwiązaniu klucze są zakodowane na stałe. – gremo
Być może bardziej standardowa implementacja 'code'foreach ($ arr jako $ key => $ val) {} spełniłaby twoje potrzeby. – jondbaker
Potrzebuję filtrować tablicę wejściową: jeśli klucz istnieje w innej tablicy, zwróć ten element. Znalazłem "array_filter" kandydata, ale nie mogę uzyskać klucza bieżącej wartości tablicy w wywołaniu zwrotnym. – gremo