CSV文件操作,PHP如何对满足条件的二维数组进行求和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSV文件操作,PHP如何对满足条件的二维数组进行求和相关的知识,希望对你有一定的参考价值。
ABC相同数值,求和C,输出新数组,如A1,A2两行,ABC相等,C合并求和等于4600,A3=1000,A4=3300,A5,A6合并=1100,A7=1000,A8,A9合并=1200以此方法类推求和输出如下格式数组:
$arr=array((93001,3.99,S,4600,-18354),(93001,4,S,1000,-4000),(93003,4.01,B,3300,13233)...);
数组中最后一个元素是这样得出结果,如果是S,则得负数,如果是B则是正数,求和结果为B列乘以C列,亦3.99X4600=-18354,4.01X3300=13233...望老师指教,谢谢!新年恭喜发财!
阵列(93001,3.99,'S',800),
阵列(93001,3.99,'S',3800),
阵列(93001,4,“ S',1000),
阵列(93003,4.01,'B',3300),
阵列(93003,4,'S',600),
阵列(93003,4, 'S',500),
阵列(93003,4,“B”,1000),
阵列(93003,4,“S”,1000),
阵列(93003,4 ,'S',200),
阵列(93003,3.99,'B',6700),
阵列(93003,4,'S',1600),
阵列(93022, 3.99,'S',14500),
阵列(93022,3.99,'S',800),
阵列(93103,3.99,'S',1000),
阵列(93103 3.99,'S',2000),
阵列(93103,3.99,'B',2000年),
阵列(93103,3.99,'S',1000),
);
$ = $收益率=阵列();
的foreach($阵列美元价值)
$数据[$值[0]。 “ - ”。美元的价值[1]。 “ - ”。值[2] ['A'] = $值[0];
$数据[$值[0]。 “ - ”。美元的价值[1]。 “ - ”。值[2] ['B'] = $值[1];
$数据[$值[0]。 “ - ”。美元的价值[1]。 “ - ”。值[2] ['C'] = $值[2];
$ [$值[0]。 “ - ”。美元的价值[1]。 “ - ”。值[2] ['值'] + = $值[3];
的foreach($ data的美元价值)
($值['C'] =='B')
美元的价值= $ ['值'] * $值['B'];
$数= - $值[VAL '] * $值['B'];
美元的回报[] =阵列($ ['A'],$值['B'],$值['C']值['值'],$号);
的回声“”;
的print_r(返回);/ /返回为最终结果
时间就是生命,没有理由浪费别人的时间,其实是无异于谋财害命。 参考技术B $array=array(
array(93001,3.99,'S',800),
array(93001,3.99,'S',3800),
array(93001,4,'S',1000),
array(93003,4.01,'B',3300),
array(93003,4,'S',600),
array(93003,4,'S',500),
array(93003,4,'B',1000),
array(93003,4,'S',1000),
array(93003,4,'S',200),
array(93003,3.99,'B',6700),
array(93003,4,'S',1600),
array(93022,3.99,'S',14500),
array(93022,3.99,'S',800),
array(93103,3.99,'S',1000),
array(93103,3.99,'S',2000),
array(93103,3.99,'B',2000),
array(93103,3.99,'S',1000),
);
$data=$return=array();
foreach($array as $value)
$data[$value[0]."-".$value[1]."-".$value[2]]['A']=$value[0];
$data[$value[0]."-".$value[1]."-".$value[2]]['B']=$value[1];
$data[$value[0]."-".$value[1]."-".$value[2]]['C']=$value[2];
$data[$value[0]."-".$value[1]."-".$value[2]]['val']+=$value[3];
foreach($data as $value)
if($value['C']=='B')
$number=$value['val']*$value['B'];
else
$number=-$value['val']*$value['B'];
$return[]=array($value['A'],$value['B'],$value['C'],$value['val'],$number);
echo "<pre>";
print_r($return);//$return为最后的结果本回答被提问者采纳 参考技术C <?php
class LoadCsv
private $filePath = '';
private $csvArray = array();
private $returnArr = array();
public function __construct($filePath = '')
if($filePath) $this->filePath = $filePath;
$this->_getCsvArray();
private function _getCsvArray()
if(is_file($this->filePath) && file_exists($this->filePath))
$resource = fopen($this->filePath, 'r') or die("cant't open file");
while (($row = fgetcsv($resource, 1024)) !== false)
$this->csvArray[] = $row;
array_shift($this->csvArray);
return true;
return false;
public function getArray()
if(empty($this->csvArray)) return array();
return $this->stringKeyToArray($this->getABC());
private function getABC()
if(empty($this->csvArray)) return array();
$abcArray = array();
foreach ($this->csvArray as $key => $value)
$k = $value[0].'|'.$value[1].'|'.$value[2];
if(isset($abcArray[$k]))
$abcArray[$k] = $abcArray[$k] + $value[3];
else
$abcArray[$k] = $value[3];
return $abcArray;
private function stringKeyToArray($array = array())
if (empty($array)) return array();
$abcArray = array();
foreach ($array as $key => $value)
$temp = explode('|', $key);
array_push($temp, $value);
$abcArray[] = $temp;
return $this->getValue($abcArray);
private function getValue($array = array())
if (empty($array)) return array();
foreach ($array as $key => $value)
$i = $value[2] == 'S' ? -1 : 1;
array_push($array[$key], $i * $value[1] * $value[3]);
return $array;
?>
<?php
require './LoadCsv.class.php';
$csvFile = new LoadCsv('./Book1.csv');
$csvArray = $csvFile->getArray();
echo '<pre>';
print_r($csvArray);
?>追问
您的其实很好用,就是计算的求和数值有错误,总是少算了CSV文件第一行的数.
追答private function _getCsvArray()
if(is_file($this->filePath) && file_exists($this->filePath))
$resource = fopen($this->filePath, 'r') or die("cant't open file");
while (($row = fgetcsv($resource, 1024)) !== false)
$this->csvArray[] = $row;
array_shift($this->csvArray);
return true;
return false;
你没有看到这行吗????你要根据自己的情况改的。任何人都不可能给你一个最完美的答案,只会给你思路!
php对二维数据进行排序
方法一:(经验证,成功)
以上是关于CSV文件操作,PHP如何对满足条件的二维数组进行求和的主要内容,如果未能解决你的问题,请参考以下文章