我有一个关联数组$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()的丑陋解决方案(并再次使用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)) ."/>";
首先,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 it's first usage. array_walk($array,function($key,$val) use(&$result) { $result .= "$key=\"$val\""; }); echo $result;