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

问题描述 投票:0回答:5

我想要实现的目标如下:

转换数组:

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

转换为字符串:

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

除了 foreach 循环(如内爆)之外,还有其他方法可以实现此目的吗?

php implode
5个回答
3
投票

如果您不想循环,可以使用 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
投票
$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 

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

0
投票

这是我的建议,因为您习惯在 php 中使用 implode,所以我为您编写了一个重复函数,该函数在分隔符中采用格式化程序元素。在任何地方放置 %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;
}

希望对您有帮助! :)


0
投票

我看到了

array_map()
array_walk()
解决方案,但没有人发布
array_reduce()
方法,所以我会为了完整起见。

对于小型数组(需要很少的迭代),

array_map()
的执行速度会稍微快一些(您的用户永远不会注意到差异)。

随着输入数组大小的增加,

array_reduce()
领先并远离
array_map()
。如果您需要执行微优化,请使用自己的真实数据进行自己的基准测试。

我的以下方法不需要

implode()
,因为
array_reduce()
输出一个字符串,但是它确实需要在每次迭代时使用条件以避免“过度粘合”。

代码:(演示

$input = ['A', 'B', 'C'];
echo array_reduce(
         $input,
         fn($result, $v) => ($result ? "$result, " : '') . "$v is $v"
     );

或者这里是

array_map()
,带有箭头函数语法,然后
implode()
:(演示

echo implode(
         ', ',
         array_map(
             fn($v) => "$v is $v",
             $input
         )
     );

输出:

A is A, B is B, C is C
© www.soinside.com 2019 - 2024. All rights reserved.