我想要实现的目标如下:
转换数组:
['A','B','C'];
成一个字符串,如:
"A is A, B is B, C is C"
除了foreach-loop(如implode)之外还有其他方法可以实现吗?
答案 0 :(得分:2)
如果您不想循环播放,可以使用array_walk()功能。
试试这个:
$input = ['A','B','C'];
function test_alter(&$item, &$key) {
$item = $item.' is '.$item;
}
array_walk($input, 'test_alter');
echo implode(', ', $input);
输出:
A is A, B is B, C is C
答案 1 :(得分:1)
$arr = ['A','B','C'];
function myfunction($arr)
{
return "$arr is $arr";
}
print_r(array_map("myfunction",$arr));
//[0] => A is A [1] => B is B [2] => C is C
答案 2 :(得分:0)
使用下面的方法使用array_walk
$arr = ['A','B','C'];
function _print($item2, $key)
{
echo "$item2 is $item2, ";
}
array_walk($arr, '_print');
或者如果需要保存在
下的字符串使用中 $arr = ['A','B','C'];
$str = '';
function _print($item2, $key)
{
global $str;
$str = $str."$item2 is $item2, ";
}
array_walk($arr, '_print');
echo trim($str,',');
答案 3 :(得分:0)
这是我的建议,因为你习惯于在php中使用implode,我写了一个重复的函数,它在你的分隔符中使用了一个formatter元素。放置%x的任何地方都会复制数组键,如下所示:
echo implodeDuplicate(" is %x, ", $myArray);
假设$ myArray是:
$myArray = array(1,2,3,4);
它会输出:
1 is 1, 2 is 2, 3 is 3, 4 is 4,
这是功能:
function implodeDuplicate($seperator, $array) {
$finalString = "";
for($i = 0; $i < count($array); $i++) {
$trueSep = str_replace("%x", $array[$i], $seperator);
$finalString .= $array[$i] . $trueSep;
}
return $finalString;
}
希望它有用! :)
答案 4 :(得分:0)
我看到array_map()
和array_walk()
解决方案,但没有人发布array_reduce()
方法,所以我会完整。
对于小型数组(需要几次迭代),array_map()
执行速度会稍快一些(您的用户永远不会注意到差异)。
随着输入数组的大小增加,array_reduce()
取得领先,距离array_map()
。如果您需要执行微优化,请使用您自己的实际数据进行自己的基准测试。
array_reduce()
循环100次:https://3v4l.org/1oCXM/perf#output
array_map()
循环100次:https://3v4l.org/WcjMB/perf#output
我的以下方法不需要implode()
因为array_reduce()
输出一个字符串,但是每次迭代都需要一个条件来避免&#34;过度粘合&#34;。 / p>
代码:(Demo)
$input=['A','B','C'];
echo array_reduce($input,function($carry,$v){return ($carry?"$carry, ":'')."$v is $v";});
输出:
A is A, B is B, C is C