php - array_reduce() 不能用作 PHP 的关联数组 "reducer"?

标签 php mapreduce associative-array

我有一个关联数组$assoc,在这种情况下需要将它缩减为一个字符串

$OUT = "<row";
foreach($assoc as $k=>$v) $OUT.= " $k=\"$v\"";
$OUT.= '/>';

怎么做in an elegant way同样的事情,但使用 array_reduce()


array_walk() 函数几乎相同的算法(较低的性能和较低的易读性),

 array_walk(  $row, function(&$v,$k){$v=" $k=\"$v\"";}  );
 $OUT.= "\n\t<row". join('',array_values($row)) ."/>";
使用 array_map()

Ugly 解决方案(以及 join() 作为 reducer):

  $row2 = array_map( 
    function($a,$b){return array(" $a=\"$b\"",1);},
    array_keys($row),
    array_values($row)
  ); // or  
  $OUT ="<row ". join('',array_column($row2,0)) ."/>";

PS:显然 PHP 的 array_reduce() 不支持关联数组(为什么??)。

最佳答案

首先,array_reduce() 使用关联数组,但您没有任何机会访问回调函数中的键,只能访问值。

您可以使用 use 关键字在闭包中通过引用访问 $result,就像下面使用 array_walk() 的示例一样。这与 array_reduce() 非常相似:

$array = array(
    'foo' => 'bar',
    'hello' => 'world'
);

// Inject reference to `$result` into closure scope.
// $result will get initialized on its first usage.
array_walk($array, function($val, $key) use(&$result) {
    $result .= " $key=\"$val\"";
});
echo "<row$result />";

顺便说一句,我认为你原来的 foreach 解决方案看起来也很优雅。此外,只要阵列保持在中小型规模,就不会有明显的性能问题。

关于php - array_reduce() 不能用作 PHP 的关联数组 "reducer"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213170/

相关文章:

php - 显示有关某个项目的更多信息 php codeigniter

hadoop - 您可以不通过 WebHCat (Templeton) 向 HDInsight 提交作业吗?

java - Hadoop 命令行配置不覆盖默认值?

logging - hadoop如何帮助用户数据追踪?

string - 为什么不能将字符串键存储在关联数组中?

php - 逗号分隔的字符串到具有小写键的关联数组

c# - 多维关联数组 C#

php - 展开列以执行 SQL 搜索查询

php - MySQL 全文在特定表上失败

java - Android 应用程序上传到远程服务器后崩溃?