php爆炸并计算字符串的总和

时间:2016-08-24 11:59:10

标签: php

我的数据库中有一个数组

example : 1:11 1,12 2,13 3,14 4,15 5,16

我不需要数组中的1:11 而且我不需要(12,13,14,15,16)

我只需要爆炸它们并在阵列中只获得1,2,3,4,5 然后我需要计算它们的总和

$tr_arr = $this->data['troops_intrap_num']; // this is the above array from db
$explode_arr = explode(" ", $tr_arr); // exploding the array
print_r($explode_arr); // this will print the array and it should look like this
Aray
(
 [0] => 1:11
 [1] => 1,12
 [2] => 2,13
 [3] => 3,14
 [4] => 4,15
 [5] => 5,16
 [6] => 0
)

我需要在爆炸后制作类似的东西

Aray ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) // and then i need to calculate the sum of the numbers 1+2+3+4+5 = 15 and echo it as 15

问题是如何删除第一个字符串1:11,最后一个字符为0,然后移除(12-13-14-15-16) 所以只留下1,2,3,4,5然后我不计算它们的总和

帮帮我

4 个答案:

答案 0 :(得分:1)

您可以使用unset()取消设置第一个值。最后一个可以用相同的方式完成,但这不是必要的,因为array_sum()只会添加零。

$array = array(
    '1:14:aaaa',
    '1.5',
    '3',
    '4.5',
    '1.5',
    '0',
);

// Unset the first value
unset($array[0]);

// Calculate total amount
$total = array_sum($array);

修改

因为您的数组的逗号为十进制字符,所以首先需要转换每个值。

$array = array_map(function($val) {
    // Without removing decimals
    // return floatval(str_replace(',', '.', str_replace('.', '', $val)));

    // Remove decimals as well
    return floor(floatval(str_replace(',', '.', str_replace('.', '', $val))));
}, $array);

完整答案

$array = array(
    '1:11',
    '2,12',
    '3,13',
    '4,14',
    '5,15',
    '0',
);

// Unset the first value
unset($array[0]);

$array = array_map(function($val) {
    // Remove decimals as well
    return floor(floatval(str_replace(',', '.', str_replace('.', '', $val))));
}, $array);

// Calculate total amount
$total = array_sum($array);

答案 1 :(得分:0)

您可以创建一个黑名单数组,并检查该数组中是否包含该值。如果没有,请将其添加到变量:

<?php
// The values you don't want.
$blacklist = array( "1:11", "12", "13", "14", "15", "16" );
$tr_arr = $this->data['troops_intrap_num']; // this is the above array from db
$explode_arr = explode(" ", $tr_arr); // exploding the array

$array_sum = 0;

foreach( $explode_arr as $index => $value )
{
    if( !in_array($value, $blacklist) )
    {
        $value = str_replace(",",".", str_replace(".","",$value) );
        $array_sum += floatval($value);
    }
}

print "the sum of the array is: " . $array_sum;

?>

答案 2 :(得分:0)

不确定我是否理解你想要的东西,但这就是我要做的。解决更多种类的数组值会更加复杂,因此即使您稍微更改它也可以使用它。

我做一个数组的foreach循环,忽略无效值(字符串和零),取有效值,得到逗号前面的整数,然后将它加到总和中。

当然,有更容易和更短的变体,但我不确定您的代码会有多大变化。

$tr_arr = $this->data['troops_intrap_num']; // this is the above array from db
$explode_arr = explode(" ", $tr_arr); // exploding the array

$sum = 0;
foreach($explode_arr as $value) {
    if($key == 0 OR !is_numeric($value)) {
        // omit the first string, OR alternately omit all not-numbers (not sure if you need to remove the first one specificaly)
        continue;
    }
    if(!$value) {
        // omit the zero at the end
        continue;
    }
    $number = (int)substr($value, 0, strpos($value, ','));

    $sum = $sum + $number;
}
echo $sum;
如果我理解正确的话,

$ sum 将是你要找的。

答案 3 :(得分:-1)

您要在迭代时计算逗号前的所有值。具有第三个参数strstr()的{​​{1}}将在针头之前提取子字符串(如果没有针头,则返回false)。

代码:(Demo

true