【问题标题】:What is an elegant way to accomplish: explode -> apply some_func -> implode without a foreach?什么是优雅的完成方式:explode -> apply some_func -> implode without a foreach?
【发布时间】:2012-02-11 20:54:56
【问题描述】:

我有一串分隔符分隔的值,需要对字符串中的每个值执行 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);

顺序并不重要,但最好保留。

谢谢!

【问题讨论】:

  • 为什么人们不赞成这个?
  • 因为他在努力学习,你知道那很糟糕。

标签: php arrays coding-style


【解决方案1】:

你正在寻找array_map:

$delim = ',';
$source_array = explode($delim, $source_string);
$destination_array = array_map('some_function', source_array)
$destination_string = implode($delim, $destination_array);

【讨论】:

  • 或一行:$dest = implode(",",array_map("some_function",explode(",",$source)));
  • 谢谢!似乎没有避免一系列爆炸然后内爆的快捷功能? ...我应该知道使用 array_map ——感谢提示。
【解决方案2】:

试试正则表达式/REGEX。或者,如果算法很繁重,请在 Perl 中编写一个脚本来处理所有这些并从 PHP 中调用它。这会让事情变得更容易。

嗯,我知道,有人会告诉你 Python 或其他脚本语言,但那是我的 2 美分。

【讨论】:

  • -1 推荐正则表达式的大锤方法或替代编程语言,当 OP 自己选择的语言为他的问题提供解决方案时,这并不是一个很好的答案。
  • 现在我得去看大锤了,
【解决方案3】:

您可以使用array_walk。 这样,您可以将函数应用于数组中的每个条目。所以你的代码看起来像这样:

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

array_map 相比,它不会生成新数组,而是在现有数组上工作……但只有在处理大型数组(想想内存)时才有意义。当然,如果您必须访问 some_function 中的其他数组值,它将无法正常工作...

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2012-01-15
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2012-09-29
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多