Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在不遍历数组两次的情况下,对正在内爆的数组的每个项执行操作(代码)?_Php_Arrays_Traversal_Implode - Fatal编程技术网

Php 在不遍历数组两次的情况下,对正在内爆的数组的每个项执行操作(代码)?

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)); 一个相当古老但

有没有一种方法可以在不遍历数组两次的情况下对正在内爆的数组的每个项执行操作

我遇到过基于lambda的解决方案,但它会遍历阵列两次(除非我错了):

$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);
}, '');