PHP array_walk 什么都不做?

发布于 2024-12-06 17:23:40 字数 301 浏览 0 评论 0原文

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

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

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

I'd like to put each file name in $xsl_dir_path (absolute path) in select element. I've tried this:

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

but it's not working at all, i can still see the full names of the files. I know i can apply basename when lopping through $files and build the option elements, but i'd like to do it before any html output.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何止钟意 2024-12-13 17:23:40

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

你想要的是 array_map

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

array_walk is useful when your callback function accepts a reference or when you use user-defined callback functions. In this case, the basename argument is not a reference.

What you want is array_map:

$files = glob($xsl_dir_path . "/*.xsl");
$files = array_map('basename', $files);
与酒说心事 2024-12-13 17:23:40

试试这个:

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

Try this:

function basename_for_walk (&$value, $key) {
    $value = basename($value);
}
$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'basename_for_walk');
爱,才寂寞 2024-12-13 17:23:40

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

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

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

That's because basename() isn't supposed to change the value of the array cells, only to return the new values. You need to pass to array_walk() a function that actually changes the value of the cell. Based on array_walk docs:

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

$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'my_basename');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文