我的数据库中有一个数组
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然后我不计算它们的总和
帮帮我
答案 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 将是你要找的。 p>
答案 3 :(得分:-1)