Non c'è un modo per lasciare che il callback di array_filter
chiave di accesso dell'elemento, né v'è una funzione simile che fa quello che si vuole.
Tuttavia, è possibile scrivere la propria funzione per questo, come quella qui sotto:
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
)
*/
fonte
2013-10-02 15:05:52
Troppo difficile, e sto lavorando con gli array indicizzati non quelli associativi. In quella soluzione le chiavi sono hardcoded. – gremo
Forse un'implementazione standard 'code'foreach ($ arr as $ key => $ val) {} potrebbe soddisfare le tue esigenze. – jondbaker
Devo filtrare l'array di input: se la chiave esiste in un altro array, restituire l'elemento. Ho trovato 'array_filter' il candidato ma non riesco a ottenere la chiave del valore corrente dell'array in callback. – gremo