【问题标题】:Php Count duplicate numbers in a string and based on the value add in another stringPhp 计算字符串中的重复数字并根据值添加到另一个字符串中
【发布时间】:2017-11-19 01:38:01
【问题描述】:

我有两个字符串:

string1 = "1,1,1,2,2,2,2,1,2,1";
string2 = "124200,23287.5,12420,31050,24840,43470,12420,6210,3105,3105"

两者具有相同数量的值,即在上述情况下为 10(count)。

现在基于 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 中的值更改了另一个总变量并添加到该变量中 现在 String1 第 4 个值 = 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,所以它应该加到总变量而不是总和 2 现在 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

这里只有 2 个唯一值,但它可以是所有不同的值或没有不同的值。

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

【问题讨论】:

  • 我不清楚你在问什么。请重新格式化您的问题,使其更清晰易懂。编写一些代码并与我们分享。请查看stackoverflow.com/help/mcve 了解更多信息。
  • 分享代码,如果可能的话,让你的问题简短而简单
  • @Marten 让我试着说得更清楚一点:String1 和 String2 的长度总是相同的,即 string1 中有 4 个数字,而 string2 中有 4 个数字。这意味着总和变量也将是 4。现在 string1 中的数字对我们来说很重要,因为每当 string1 中的数字重复时,我们都会将一些 string2 添加到相应的 sum/total 变量中。最后,所有 sum 变量应显示最终(添加)结果。如果您仍然觉得有什么不清楚的地方,请告诉我。
  • @Hitesh,你应该编辑你的问题而不是评论;)
  • 我确定这个问题有一个特定的名称,只是我现在不记得了。

标签: php string count duplicates


【解决方案1】:

您可以通过以下方式进行操作,这是我的代码

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

【讨论】:

  • 感谢您的努力,但是如果 String1 = "1,2,3,4,5,6,7,8,9,10" 和 string2 在这种情况下保持不变,它应该有 10 个总变量并且每个都显示 string2 的单个值我猜上面的代码不会在那里工作,因为 arr1 和 arr2 是静态变量
【解决方案2】:

这是一个策略:

<?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));

查看http://sandbox.onlinephpfunctions.com/code/71bb2cd6d17f4086e8c9f9676aac4afe31df73ba

已编辑:删除垃圾。

【讨论】:

  • 它有效,但我如何访问以下值:Array ([1] => 169222.5 [2] => 114885)
  • $result = array_map('array_sum',$cumulateGroups);(而不是print_r)然后你可以访问$result[1]$result[2]
【解决方案3】:

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

if($string[0]==$string[1]){ $total=$string2[0]+$string2[1];

}其他{ $total=$string2[0]; } 回声 $total; ?>

【讨论】:

  • 对所有人都这样做
  • 不能那样做,因为字符串中数字的长度是动态的,但两者都一样,比如它可能是 string1 = "3,7" 和 string2 = "1200,456" 计数将始终保持不变,但长度可能会有所不同,所以我需要一个动态解决方案。感谢您的帮助
【解决方案4】:

伪代码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2019-12-23
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2020-04-13
    相关资源
    最近更新 更多