Php 在不遍历数组两次的情况下,对正在内爆的数组的每个项执行操作(代码)?
有没有一种方法可以在不遍历数组两次的情况下对正在内爆的数组的每个项执行操作 我遇到过基于lambda的解决方案,但它会遍历阵列两次(除非我错了):Php 在不遍历数组两次的情况下,对正在内爆的数组的每个项执行操作(代码)?,php,arrays,traversal,implode,Php,Arrays,Traversal,Implode,有没有一种方法可以在不遍历数组两次的情况下对正在内爆的数组的每个项执行操作 我遇到过基于lambda的解决方案,但它会遍历阵列两次(除非我错了): $array=array('some'、'boring'、'items'); $func=函数($arr){ $return=array(); foreach($arr作为$item){ $return[]=ucfirst($item); } return$return; }; 回显“”。内爆('#',$func($array)); 一个相当古老但
$array=array('some'、'boring'、'items');
$func=函数($arr){
$return=array();
foreach($arr作为$item){
$return[]=ucfirst($item);
}
return$return;
};
回显“”。内爆('#',$func($array));
一个相当古老但没有实用的解决方案被给出
我希望避免像这样重新编码内爆:
$iter=新阵列计数器($array);
而($iter->valid()){
首先($iter->current());
$iter->next();
如果($iter->valid()){
回音“#”;
}
}
当然可以,为什么不呢。只需就地使用函数调用,如:
$array = array('some','boring','items');
$result = substr(array_reduce($array, function(&$cur, $x)
{
return $cur.='#'.ucfirst($x);
}, ''), 1);
或者(如果您希望在执行substr()
时避免字符串开销),请使用
-不太“漂亮”-但每个元素肯定只使用一次。谢谢,它工作良好,并且与执行is项的任何“操作”兼容。
$result = ucfirst(array_shift($array)).array_reduce($array, function(&$cur, $x)
{
return $cur.='#'.ucfirst($x);
}, '');