注意:这是一个关于技术练习的问题。请专注于使用我需要的相同或相似的数组函数,而不是将代码分成明显更易读但更长的代码段。
我正在尝试一起使用 anarray_filter()
和 an array_walk()
。这些功能我用的不多,所以想在过程中了解一下。
- 我有一组可能的环境字符串('sandbox'、'live'、'dev')
- 我有一个包含所选环境('dev')的字符串
- 我有一个文件路径数组使用
glob()
我需要使用 glob 检索不包含来自两个环境之间差异的字符串的文件列表。
我有以下起始变量:
$possible = array('dev', 'sandbox', 'live');
$env = array('dev');
显然两者之间的区别:
$diff = array_diff($possible, $env); // array('sandbox', 'live')
我尝试执行的目录glob()
包含以下内容:
array(
0 => '/config/dev.yml',
1 => '/config/sandbox.yml',
2 => '/config/live.yml',
3 => '/config/global.yml',
4 => '/config/routes.yml',
5 => '/config/security.yml'
);
我想使用数组函数调用来返回以下内容:
array(
0 => '/config/dev.yml', // Because $env = 'dev'. Sandbox and live are removed
1 => '/config/global.yml',
2 => '/config/routes.yml',
3 => '/config/security.yml
);
注意如何sandbox.yml
和live.yml
已被删除。
这是我正在使用的代码:
/** Loop through the list of yml files, placing $file into the local scope each time around, also import $possible, $env, $diff **/
$result = array_filter(glob(dirname(__DIR__) . '/config/*.yml'), function ($file) use ($possible, $env, $diff) {
/** Loop around the diff (sandbox, live), placing them into $d each time around, also import $file again **/
return array_walk($diff, function($d) use ($file) {
/** Return when each environment (sandbox, live) is NOT in the $file string **/
return !strstr($file, $d);
});
});
我的问题是:无论最里面的 return 更改为什么,它都不会更改 result。我可以在那里返回真或假,这没有什么区别。我得到了所有文件的列表,*包括包含字符串“sandbox.yml”和“live.yml”的文件,这不是我想要的。
我的逻辑哪里出错了?