当前位置: 首页 > 知识库问答 >
问题:

无法调用array_filter()[duplicate]之外的变量

桑成荫
2023-03-14

为什么我不能在array_filter()之外调用变量,这是我的代码

class JsonSelect
{
    public function jsonSource($jsonSource, $val){

        $file_contents = file_get_contents($jsonSource);

        if(!$file_contents){
            throw new Exception('Invalid file name');
        }

        $json = json_decode($file_contents, true);
        $q = $_POST['q'];
        $filtered = $json;

        if(strlen($q)) {
            $filtered = array_filter($json, function ($key) use ($q) {
                if (stripos($key[$val], $q) !== false) {
                    return true;
                } else {
                    return false;
                }
            });
        }

        echo json_encode(array_slice(array_values($filtered), 0, 20));
    }
}

共有1个答案

林鹏鹍
2023-03-14

匿名函数中的变量的作用域仅在匿名函数中。

您需要从父作用域继承变量。您可以在有关匿名函数的PHP文档中找到更多有关它的细节(示例#3)

这将改变这一行:

$filtered = array_filter($json, function ($key) use ($q) {
$filtered = array_filter($json, function ($key) use ($q, $val) {
 类似资料:
  • 前面提到的代码是从MDN修改的。这段代码没有任何意图,只是为了变量声明示例的目的。

  • 问题内容: 在回调函数之外使用全局变量的最佳方法是什么? 问题答案: 您提供的代码是完全有效的,并且实际上 可以 “保持”其价值。问题可能是异步运行的-仅 在 从服务器完全加载后才调用匿名函数。因此,现实世界中的执行顺序如下所示: 调用 (开始加载data.xml) 通话(目前仍为null) (data.xml中完成载入) 现在 匿名函数被调用时,其分配值给图标:。 如果你想要做一些事情的价值,

  • 问题内容: 我有以下代码 现在,测试var应该像控制台那样将false设置为true。但是test var给了我不确定的原因? 问题答案: 可能是因为Validate.fail(test)在异步调用之后立即发生。请记住,它是异步的,这意味着它与页面上运行的javascript并行执行。

  • 在这个解决方案中,我可以调用void中的变量。当我试图在void之外调用它时,数据是空的。 但我只想知道,为什么我的代码一开始就不能工作?谢谢。

  • 问题内容: 究竟是什么之间的区别,和。我从文档中可以看到,您可以传递一个回调函数来对提供的数组执行操作。但是我似乎没有发现它们之间有什么特别的区别。 他们执行相同的事情吗? 它们可以互换使用吗? 如果它们完全不同,请提供示例说明,我们将不胜感激。 问题答案: 更改值: 可以时不能更改输入数组内的值;特别是,永远不要更改其参数。 阵列键访问: 不能使用阵列键操作,可以。 返回值: 返回一个新数组,仅

  • 我只是在学习编码,所以我遇到了“k不能解决”的问题。 我以前尝试过引入变量,如果运算符by: 我预期输出为2 相反,无法解析got k