php更改数组值

时间:2015-11-13 04:21:31

标签: php arrays explode

我有一个像这样的数组

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

我想像这样转换它

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

我也想打印出这样的方式 10 10 6 五 五 五 2 2

我该怎么做?

3 个答案:

答案 0 :(得分: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个捕获的组中捕获它们。然后在回调函数中,我们遍历第二个捕获的组,并通过附加+和第一个捕获的组来构造我们的输出。

答案 1 :(得分:0)

这是使用正则表达式和各种功能的解决方案。有很多方法可以完成你所要求的,而这只是其中之一。我确信这甚至可以改进,但现在是:

$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
)

答案 2 :(得分:-1)

 <?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]."+";

    }         
 ?>