Php计算一个字符串中的重复数字,并基于另一个字符串中的加值

Php计算一个字符串中的重复数字,并基于另一个字符串中的加值,php,string,count,duplicates,Php,String,Count,Duplicates,我有两条线: string1=“1,1,1,2,2,2,1,2,1” string2=“12420023287.51242031050248404347012420621031053105” 两个值的数量相等,即在上述情况下为10(计数) 现在,基于string1值,我想添加string2值。 示例:String1的第一个值是1,所以现在只要在String1中重复该值,就使用string2的第一个值,它应该在string2中相加 所以String1第一个值=1 var总计=124200 现在St

我有两条线:

string1=“1,1,1,2,2,2,1,2,1”
string2=“12420023287.51242031050248404347012420621031053105”

两个值的数量相等,即在上述情况下为10(计数)

现在,基于string1值,我想添加string2值。 示例:String1的第一个值是1,所以现在只要在String1中重复该值,就使用string2的第一个值,它应该在string2中相加

所以String1第一个值=1 var总计=124200

现在String1第二个值=1 var总计=124200+23287.5

现在String1第三个值=1 var总计=124200+23287.5+12420

在这里,由于string1中的值发生了更改,所以取另一个total变量并添加到该变量中 现在String1第四个值=2 var total2=31050

现在string1第5个值=2 var total2=31050+24840

现在string1第6个值=2 var total2=31050+24840+43470

现在string1第7个值=2 var total2=31050+24840+43470+12420

这里的值再次是1,所以它应该加在total变量中,而不是total2中 现在string1第8个值=1 var总计=124200+23287.5+12420+6210

现在string1第9个值=2 var total2=31050+24840+43470+12420+3105

现在string1第10个值=1 var总计=124200+23287.5+12420+6210+3105

结果: 总计=169222.5 总计2=114885

这里只有两个唯一的值,但可以是所有不同的值,也可以没有不同的值


注意:让我更清楚地说明:String1和String2的长度始终相同,即String1中有4个数字,然后String2中有4个。这意味着变量之和也将是4。现在,string1中的数字对我们来说很重要,因为每当string1中的数字重复出现时,我们都会将string2的数量添加到相应的总和/总变量中。最后,所有sum变量应显示最终(添加)结果

将值存储在数组中。使用if语句进行比较。像这样的

如果($string[0]==$string[1]){$total=$string2[0]+$string2[1]

}else{$total=$string2[0];}echo$total;?>

伪代码

1) convert both strings to arrays(arr1,arr2) using explode
2) create new associative array output{key=>value}
3) foreach on arr1, do output['value of arr1']+=value of arr'2'
4) output will be your desired result

你可以用下面的方法来做这是我的代码

    $string1 = "1,1,1,2,2,2,2,1,2,1"; 
    $arr1 = array();
    $string2     = "124200,23287.5,12420,31050,24840,43470,12420,6210,3105,3105";
    $arr2 = array();

    $string1_arr = explode(',', $string1);
    $string2_arr = explode(',', $string2);


    $previous_value = '1';

    foreach ($string1_arr as $key => $value) 
    {

        if($value == $previous_value)
        {
            array_push($arr1, $string2_arr[$key]);
            $previous_value = $value;
        }
        else
        {
            array_push($arr2, $string2_arr[$key]);

        }
    }
    $total = array_sum($arr1);
    $total2 = array_sum($arr2);
这里有一个策略:

<?php
$str1 = "1,1,1,2,2,2,2,1,2,1"; 
$str2 = "124200,23287.5,12420,31050,24840,43470,12420,6210,3105,3105";
$array1 = explode(",",$str1);
$array2 = explode(",", $str2);
$cumulateGroups = [];
foreach ($array1 as $index => $groupIndex) {
   $cumulateGroups[$groupIndex] = isset($cumulateGroups[$groupIndex])?$cumulateGroups[$groupIndex]:[];
   $cumulateGroups[$groupIndex][] = $array2[$index];
}
print_r(array_map('array_sum',$cumulateGroups));

我不清楚你在问什么。请重新编排您的问题,使其更清楚、更易懂。编写一些代码并与我们共享。查看更多信息。分享代码,如果可能的话,让你的问题简短明了simple@Marten让我更清楚地说明一下:String1和String2总是有相同的长度,即String1中有4个数字,然后String2中有4个。这意味着变量之和也将是4。现在,string1中的数字对我们来说很重要,因为每当string1中的数字重复出现时,我们都会将string2的数量添加到相应的sum/total变量中。最后,所有sum变量应显示最终(添加)结果。如果你仍然觉得有什么不清楚的地方,请告诉我。@Hitesh,你应该编辑你的问题而不是评论;)我确信这个问题有一个特定的名称,我只是现在不记得了。对所有人都一样。不能这样做,因为字符串中数字的长度是动态的,但对两者都一样,就像它可能是string1=“3,7”和string2=“1200456”计数将始终保持不变,但长度可能不同,因此我需要一个动态解决方案。感谢您的帮助,感谢您的努力,但是如果String1=“1,2,3,4,5,6,7,8,9,10”和string2在这种情况下保持不变,那么它应该有10个总值,并且每个值都显示string2的单个值作为总值,我想上面的代码不会在那里工作,因为arr1和arr2是静态变量,但是如何访问以下值:Array([1]=>169222.5[2]=>114885)
$result=Array\u map('Array\u sum',$cumulateGroups)
(而不是
打印
),然后您可以访问
$result[1]
$result[2]