PHP的array_walk函数无效?

3

我希望在选择元素中放置$xsl_dir_path(绝对路径)中的每个文件名。 我尝试过以下方法:

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

但是它根本不起作用,我仍然可以看到文件的完整名称。我知道当循环遍历$files并构建option元素时,我可以应用basename,但我想在任何HTML输出之前这样做。


1
glob() 函数总是返回完整的文件路径。如果您不想要完整的路径,那么您需要在之后进行截取。 - Pekka
@Pekka 我知道,这就是为什么我想要将basename函数应用于glob数组的每个元素(以优雅的方式 - 意味着我不想循环$files并创建新数组)。 - gremo
啊,我明白了。我认为这是因为basename()函数不符合array_walk()所需的回调类型 - 你需要构建一个自定义函数,直接修改第一个参数。 - Pekka
3个回答

8

array_walk在回调函数接受引用或使用自定义回调函数时非常有用。在这种情况下,basename参数不是一个引用。

您需要的是array_map

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

0
这是因为basename()不应该改变数组单元格的值,只能返回新值。你需要传递一个实际上改变单元格值的函数给array_walk()。根据array_walk文档
function my_basename(&$item)
{
    $item = basaname($item);
}

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

工作正常但看起来很丑。无论如何还是感谢! - gremo

0

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接