【问题标题】:Filtering a Multidimensional Array based on User Input根据用户输入过滤多维数组
【发布时间】:2012-09-08 01:22:26
【问题描述】:

我在这里找到了一个关于如何过滤多维数组的优秀教程: PHP filter 2 dimensional array by specific key

虽然

$filtered = array_filter(
    $array, 
    function($v) { 
        return $v['type'] == 'folder'; 
    }
); 

在仅显示文件夹条目方面确实符合我的需要,我需要能够根据用户输入过滤数组。

因此,从我上面提到的页面上使用的示例来看,文件夹和页面会有一个复选框,然后根据用户选择的内容(页面、文件夹或两者),将显示他们的选择。

我遇到的问题是我似乎无法使用变量来存储 $v['type'] == 'folder'。

我希望做类似的事情:

$filtered = array_filter($array, function($v) { return $userSelections; });

我还探索了使用 eval() 的可能性(我知道这可能不是最好的主意,但我已经尝试了我能想到的所有其他方法)来提供变量的内容,但这似乎不是也可以工作。

这里的任何建议都会很棒。

谢谢。

【问题讨论】:

    标签: php


    【解决方案1】:

    这可能是因为闭包内的变量范围。尝试以下方法:

    $filtered = array_filter($array, 
        function($v) use ($userinput) { 
            return in_array($v['type'], $_POST['userSelections']); 
        }
    );
    

    使用use,您可以将外部变量声明为可从闭包内部访问 - 您可以将其设为“全局”。

    编辑:我包含了下面的最终解决方案。

    【讨论】:

    • 如果一切正常,只需将问题标记为已解决/答案为正确。我的荣幸。
    • Louis,感谢您的快速回复,但是如果用户同时选择页面和文件,我将如何完成这项工作?复选框方法会将他们的选择存储在一个数组中,并且必须使用每一个。
    • 用 in_array 检查它:return in_array($v['type'], $userinput);
    • 完美!!再次感谢您的快速回复。这几天我一直在用头撞桌子。
    • 有些事情并不那么容易弄清楚,即使解决方案非常简单。但毕竟对于这样的事情,存在类似 stackoverflow 的页面。
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2013-10-03
    • 2016-11-19
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2014-02-23
    • 2021-01-18
    相关资源
    最近更新 更多