Какой элегантный способ выполнить: взорвать -> применить some_func -> взорвать без foreach? - PullRequest
2 голосов
/ 12 февраля 2012

У меня есть строка значений, разделенных разделителями, и мне нужно выполнить some_func для каждого из значений в строке.Какой самый компактный / элегантный способ сделать это?Вот код, который я сейчас использовал бы:

$delim = ',';
$source_array = explode($delim, $source_string);

$destination_array = array();
foreach ($source_array as $val) {
    $destination_array[] = some_function($val);
}
$destination_string = implode($delim, $destination_array);

Порядок не важен, но было бы неплохо его сохранить.

Ответы [ 3 ]

5 голосов
/ 12 февраля 2012

Вы ищете array_map:

$delim = ',';
$source_array = explode($delim, $source_string);
$destination_array = array_map('some_function', source_array)
$destination_string = implode($delim, $destination_array);
0 голосов
/ 12 февраля 2012

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

$delim = ',';
$parts = explode($delim, $source_string);
array_walk($parts, 'some_function');
$destination_string = implode($delim, $parts);

По сравнению с array_map он не будет генерировать новый массив, а будет работать с существующим массивом ... но это будет значительным, если вы будете работатьс огромными массивами (вспомним память).И, конечно, это не сработает, если вам нужно получить доступ к другим значениям массива в some_function ...

0 голосов
/ 12 февраля 2012

Попробуйте регулярные выражения / REGEX. Или, если алгоритм тяжелый, создайте скрипт на Perl для обработки всего этого и вызовите его из PHP. Это облегчит жизнь.

Ну, я знаю, кто-то скажет вам Python или другой язык сценариев, но это мои 2 цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...