PHP:内爆数组并多次使用每个数组值

时间:2016-08-24 07:18:44

标签: php implode

我想要实现的目标如下:

转换数组:

['A','B','C'];

成一个字符串,如:

"A is A, B is B, C is C"

除了foreach-loop(如implode)之外还有其他方法可以实现吗?

5 个答案:

答案 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()。如果您需要执行微优化,请使用您自己的实际数据进行自己的基准测试。

我的以下方法不需要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