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...望老师指教,谢谢!新年恭喜发财!

参考技术A $阵列=阵列(
阵列(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对二维数据进行排序

PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义。

方法一:(经验证,成功)

 
作用:对二维数组进行指定key排序
参数:$arr 二维数组 ,$shortKey 需要排序的列,$short 排序方式 $shortType 排序类型
 
function multi_array_sort($arr,$shortKey,$short=SORT_DESC,$shortType=SORT_REGULAR)
{
foreach ($arr as $key => $data){
$name[$key] = $data[$shortKey];
}
array_multisort($name,$shortType,$short,$arr);
return $arr;
}
 
方法二:是对一个给定的二维数组按照指定的键值进行排序
 
function array_sort($arr,$keys,$type=‘asc‘){ 
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == ‘asc‘){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array; 

以上是关于CSV文件操作,PHP如何对满足条件的二维数组进行求和的主要内容,如果未能解决你的问题,请参考以下文章

Vector容器 二维数组sort()排序

在 PHP 中使用条件语句进行二维关联数组排序

微信小程序数组操作

C++如何读取CSV文件并赋值到二维数组里

如何在 PHP 中对多维数组进行排序 [重复]

VB.NET:将 CSV 文件读入二维数组