在PHP中映射过滤的数组

时间:2017-05-24 08:30:51

标签: php arrays

我正在尝试将一个数组 array1 映射为另一个数组 array2 的键。基本上这个:

[
    "array1_val1" => [ 
        "array2_val1"=> "creation_time", 
        "array2_val2"=> "creation_time", 
        ... 
    ],
    ...,
]

这不是问题,问题是我正在尝试的方法。如下:

$div = array_map(function ($value){
    global $files;
    global $value;
    return array_filter($files, function($k){
        // global $value;
        $ex = explode("_", $k);
        var_dump(substr($ex[0], 0, 5)."    ".$value."   ".__LINE__);
        return substr($ex[0], 0, 5) === $value;
    }, ARRAY_FILTER_USE_KEY);
}, $file_names_g);

解释

  • $ file_names_g - 是一个包含所有不同值的数组($ files值的文件名的前5个字母)
  • $ files - 是一个包含文件名(键)和创建日期(值)的数组。 filname在 $ file_names_g 中以相同的5个字母开头,其余部分根据文件的创建日期而有所不同。

文件名示例: ABC_24May2017.bak

现在我希望文件以 $ file_names_g 中相同的前5个字母开头,其中 $ file_names_g 是一个键,并且数组的文件名为关键字和创建日期作为值,(这是$ files数组的格式)。

现在问题是我无法弄清楚如何给array_filter中的函数赋值$ variable变量。提及它global没有用,我得到一个空值或null。我怎样才能克服这个问题,或者有更好的方法吗?

此致

1 个答案:

答案 0 :(得分:3)

您可以在封闭函数内使用use

中的外部作用域中定义的变量
$value = 'foo';
function($k) use ($value) {
     // you can now access the variable value
}