PHP array_walk ничего не делает? - PullRequest
       2

PHP array_walk ничего не делает?

2 голосов
/ 24 сентября 2011

Я бы хотел поместить каждое имя файла в $ xsl_dir_path (абсолютный путь) в элементе select. Я пробовал это:

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

но это не работает вообще, я все еще могу видеть полные имена файлов. Я знаю, я могу применить basename при переходе через $files и создать опцию элементов, но я бы хотел сделать это перед выводом html.

Ответы [ 3 ]

6 голосов
/ 24 сентября 2011

array_walk полезно, когда ваша функция обратного вызова принимает ссылку или когда вы используете пользовательские функции обратного вызова. В этом случае аргумент basename не является ссылкой.

То, что вы хотите, это array_map:

$files = glob($xsl_dir_path . "/*.xsl");
$files = array_map('basename', $files);
0 голосов
/ 24 сентября 2011

Попробуйте это:

function basename_for_walk (&$value, $key) {
    $value = basename($value);
}
$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'basename_for_walk');
0 голосов
/ 24 сентября 2011

Это потому, что basename() не должен изменять значение ячеек массива, а только возвращать новые значения.Вам нужно передать array_walk() функцию, которая фактически изменяет значение ячейки.Основано на документах array_walk :

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

$files = glob($xsl_dir_path . "/*.xsl");
array_walk($files, 'my_basename');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...