php 更改数组值

php change the array value

我有一个这样的数组

$first = array("10.2+6","5.3+2.2");

我想这样转换

$second = array("10+10+6","5+5+5+2+2");

我也想打印出来这样的方式 10 10 6个 5个 5个 5个 2个 2

我该怎么做?

您可以使用这个 preg_replace_callback 函数:

$first = array("10.2+6", "5.3+2.2");

$second = preg_replace_callback('/\b(\d+)\.(\d+)\b/', function($m){
      $_r=$m[1]; for($i=1; $i<$m[2]; $i++) $_r .= '+' . $m[1] ; return $_r; }, $first);

print_r($second);

输出:

Array
(
    [0] => 10+10+6
    [1] => 5+5+5+2+2
)

我们使用此正则表达式 /\b(\d+)\.(\d+)\b/ 分别匹配 DOT 前后的数字,并将它们捕获到 2 个捕获组中。然后在回调函数中,我们遍历第二个捕获组并通过附加 + 和第一个捕获组来构建我们的输出。

这是一个使用正则表达式和各种函数的解决方案。有很多方法可以完成您的要求,这只是其中之一。我敢肯定这甚至可以改进,但这里是:

$first = array("10.2+5","5.3+2.2");
$second = array();
$pattern = '/(\d+)\.(\d)/';
foreach($first as $item){
    $parts = explode('+',$item);
    $str = '';
    foreach($parts as $part){
        if(strlen($str)>0) $str .= '+';
        if(preg_match_all($pattern, $part, $matches)){
            $str .= implode("+", array_fill(0,$matches[2][$i], $matches[1][$i]));
        }else{
            $str .=  $part;
        }
    }
    $second[] = $str;
}
print_r($second);

输出:

Array
(
    [0] => 10+10+5
    [1] => 5+5+5+2+2
)
 <?php

 $first = array("10.2+5","5.3+2");
    foreach($first as $term)
    {
         $second="";
              $a=explode("+", $term);
              $b=explode(".", $a[0]);
              $c=$b[0];
              for ($i=0;$i<$b[1];$i++)
                    $second=$second.$c."+";
              echo $second.$a[1]."+";

    }         
 ?>