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]."+";
}
?>
我有一个这样的数组
$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]."+";
}
?>