PHP array_walk什么都不做?

时间:2011-09-24 18:19:45

标签: php arrays glob

我想在select元素中将每个文件名放在$ xsl_dir_path(绝对路径)中。我试过这个:

$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'basename');

但它根本不起作用,我仍然可以看到文件的全名。 我知道我可以在浏览basename时应用$files并构建选项元素,但我想在任何html输出之前执行此操作

3 个答案:

答案 0 :(得分:6)

当您的回调函数接受引用或使用用户定义的回调函数时,

array_walk非常有用。在这种情况下,basename参数不是引用。

你想要的是array_map

$files = glob($xsl_dir_path . "/*.xsl");
$files = array_map('basename', $files);

答案 1 :(得分:0)

那是因为basename()不应该改变数组单元格的值,只是为了返回新值。您需要向array_walk()传递一个实际更改单元格值的函数。基于array_walk docs

function my_basename(&$item)
{
    $item = basaname($item);
}

$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'my_basename');

答案 2 :(得分:0)

试试这个:

function basename_for_walk (&$value, $key) {
    $value = basename($value);
}
$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'basename_for_walk');