我有一个像这样的数组
$first = array("10.2+6","5.3+2.2");
我想像这样转换它
$second = array("10+10+6","5+5+5+2+2");
我也想打印出这样的方式 10 10 6 五 五 五 2 2
我该怎么做?
答案 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]."+";
}
?>