为什么我不能在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));
}
}
匿名函数中的变量的作用域仅在匿名函数中。
您需要从父作用域继承变量。您可以在有关匿名函数的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