PHP:如何使用Array_filter()來過濾數(shù)組鍵?中的回調(diào)函數(shù)array_filter()只傳遞數(shù)組的值,而不是鍵。如果我有:$my_array = array("foo" => 1, "hello" => "world");$allowed = array("foo", "bar");刪除所有鍵的最佳方法是什么$my_array不在$allowed陣列?期望產(chǎn)出:$my_array = array("foo" => 1);
3 回答

胡子哥哥
TA貢獻1825條經(jīng)驗 獲得超6個贊
array_filter()
, flag
ARRAY_FILTER_USE_KEY
$my_array = ['foo' => 1, 'hello' => 'world'];$allowed = ['foo', 'bar'];$filtered = array_filter( $my_array, function ($key) use ($allowed) { return in_array($key, $allowed); }, ARRAY_FILTER_USE_KEY);
array_intersect_key($my_array, array_flip($allowed))
$allowed
ARRAY_FILTER_USE_BOTH
$allowed
$my_array = ['foo' => 1, 'bar' => 'baz', 'hello' => 'wld'];$allowed = ['foo' => true, 'bar' => true, 'hello' => 'world'];$filtered = array_filter( $my_array, function ($val, $key) use ($allowed) { // N.b. $val, $key not $key, $val return isset($allowed[$key]) && ( $allowed[$key] === true || $allowed[$key] === $val ); }, ARRAY_FILTER_USE_BOTH); // ['foo' => 1, 'bar' => 'baz']

慕斯王
TA貢獻1864條經(jīng)驗 獲得超2個贊
array_intersect_key
array_flip
:
var_dump(array_intersect_key($my_array, array_flip($allowed)));array(1) { ["foo"]=> int(1)}

隔江千里
TA貢獻1906條經(jīng)驗 獲得超10個贊
array_filter
// Filter out array elements with keys shorter than 4 characters$a = array( 0 => "val 0", "one" => "val one", "two" => "val two", "three"=> "val three", "four" => "val four", "five" => "val five", "6" => "val 6"); $f = array_filter(array_keys($a), function ($k){ return strlen($k)>=4; }); $b = array_intersect_key($a, array_flip($f));print_r($b);
Array( [three] => val three [four] => val four [five] => val five)
- 3 回答
- 0 關(guān)注
- 848 瀏覽
添加回答
舉報
0/150
提交
取消