Php array_filter 没有通过 Key 访问数组值

Php array_filter not accessing array value by Key

所以下面的代码按预期工作并过滤掉空值和我在请求中收到的字符串“undefined”

$search_params = array_filter(
                    $search_params,
                    function ($val, $key) {
                        return (isset($val) && $val != 'undefined');
                    },
                    ARRAY_FILTER_USE_BOTH
                );

但是当我尝试在函数下方执行操作时,永远不会 returns 返回过滤后的数组,例如总是返回 false

$search_params = array_filter(
                    $search_params,
                    function ($val, $key) {
                        return (isset($search_params[$key]) && $val != 'undefined');
                    },
                    ARRAY_FILTER_USE_BOTH
                );

我想知道是什么导致了这种行为,这是某种上下文问题吗?

全局变量$search_params不在函数内。使用 use() 指令指示应继承到函数范围内的变量。

$search_params = array_filter(
    $search_params,
    function ($val, $key) use ($search_params) {
        return (isset($search_params[$key]) && $val != 'undefined');
    },
    ARRAY_FILTER_USE_BOTH
);

您的 $search_params 在回调函数中不可用。您必须使用 use

显式传递它
$search_params = array_filter(
    $search_params,
    function ($val, $key) use ($search_params) {
        return (isset($search_params[$key]) && $val != 'undefined');
    },
    ARRAY_FILTER_USE_BOTH
);

PHP 7.4 开始,您可以使用可以访问上述范围的箭​​头函数:

$search_params = array_filter(
    $search_params,
    fn ($val, $key) => isset($search_params[$key]) && $val != 'undefined',
    ARRAY_FILTER_USE_BOTH
);

在此处阅读更多内容: