是不是你的代码忘写了点,要不你可以和我去后盾人平台看看相关教材,多看几遍,慢慢的这样不就会了,希望能帮到你,给个采纳吧谢谢(つಥ㉨ಥ)つ
成都创新互联公司基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
foreach($array as $v){//$array 是要重组的数组
$val1[] = $v[0];
$val2[] = $v[1];
$val3[] = $v[2];
$val4[] = $v[3];
}
//生成4个同类数组
直接给你上代码和效果了。
建议1:合计最后一行可以让前端处理。
建议2:下次在发问题的时候,把所有场景的数组已文本的形式贴在问题里,不然在给你解决问题的过程中数据部分都得照着你的图片打出来(坑~)
效果图:
php代码:
?php
$array = array(
array(
'create_time' = '2018-02-14 15:36:32',
'receivable_balance' = '200.00',
'name' = '李四',
'business_id' = 2
),
array(
'create_time' = '2018-02-21 15:36:31',
'receivable_balance' = '200.00',
'name' = '李四',
'business_id' = 2
),
array(
'create_time' = '2018-02-21 15:30:13',
'receivable_balance' = '-1000.00',
'name' = '王五',
'business_id' = 3
),
array(
'create_time' = '2018-02-27 15:30:13',
'receivable_balance' = '-1000.00',
'name' = '王五',
'business_id' = 3
),
array(
'create_time' = '2018-02-27 15:30:14',
'receivable_balance' = '-2000.00',
'name' = '王五',
'business_id' = 3
),
array(
'create_time' = '2018-02-28 15:30:14',
'receivable_balance' = '2000.00',
'name' = '王五',
'business_id' = 3
)
);
// 把所有的日期拿出来组合 table 标题
$dates = [];
foreach ($array as $key = $val) {
$date = date('Y-m-d', strtotime($val['create_time']));
if (!in_array($date, $dates)) {
array_push($dates, $date);
};
}
// 日期正序
sort($dates);
/**
* 组合新数组
*/
$listsArray = [];
$sumArray = [];
foreach ($array as $key = $val) {
$date = date('Y-m-d', strtotime($val['create_time']));
// 列表
if (isset($listsArray[$val['name']][$date])) {
// 如果某人一天多次进行累加
$listsArray[$val['name']][$date]['receivable_balance'] = bcadd($listsArray[$val['name']][$date]['receivable_balance'], $val['receivable_balance'], 2);
} else {
$listsArray[$val['name']][$date] = $val;
}
// 合计
if (!isset($sumArray[$date]['sum'])) { // 如果当天日期没有的设置为 0
$sumArray[$date]['sum'] = 0.00;
}
$sumArray[$date]['sum'] = bcadd($sumArray[$date]['sum'], $val['receivable_balance'], 2);
}
$table = "table border='1'";
// 标题行开始
$table .= "tr";
$table .= "td序号/tdtd业务员/td";
foreach ($dates as $date) {
$table .= "td" . $date . "/td";
}
$table .= "/tr";
// 标题行结束
// 列表数据开始
$i = 1;
foreach ($listsArray as $name = $val) {
$table .= "tr";
$table .= "td" . $i . "/tdtd" . $name . "/td";
foreach ($dates as $date) {
if (isset($val[$date])) {
$table .= "td" . $val[$date]['receivable_balance'] . "/td";
} else {
$table .= "td" . "--" . "/td";
}
}
$table .= "/tr";
$i++;
}
// // 列表数据结束
// 合计数据开始
$table .= "tr";
$table .= "tdnbsp;/tdtd合计:/td";
foreach ($dates as $date) {
$table .= "td" . $sumArray[$date]['sum'] . "/td";
}
$table .= "/tr";
// 合计数据结束
$table .= "/table";
echo $table;
1、从给出的3个数组标本,到形成最后的合并数组,没有现成的函数,只能编写代码逐条记录手工合并。
2、从单个数组到合并数组,并没有类似 1+1=2 的逻辑关系,比如:
val3 和 var4 在合并数组里是 val1 的成员,而这种关系在给出的标本里完全看不到。
从合并数组看, val 包含 val1 和 val2,这种关系怎么得到的?
?php
$aa=array('28'=0,'27'=0,'26'=0,'25'=0,'24'=0,'23'=0,'22'=0);
$bb=array('27'=1,'25'=3,'23'=1);
foreach ($aa as $ak = $av){
foreach ($bb as $bk = $bv){
if($ak==$bk){
$aa[$ak]=$bb[$bk];
}
}
}
print_r($aa);
PHP 有很多非常好用的数组处理函数,PHP 数组函数官方文档都有 80 多个,但是在使用过程,有一些数组的操作使用比较多,我就把这些函数整理成工具函数,然后整合到 WPJAM Basic 中,方便自己的二次开放时候使用,现在整理放出来,如果你和我一样基于 WPJAM Basic 进行二次开发,也可以使用:
PHP 从关联数组中移除指定的键值对,一般使用 unset 函数,比如:
如果要移除多个键值对,就要调用多次的 unset 函数,所以就合并成一个函数 :
这样就可以通过下面方式移除键值对了:
如果仅仅移除一个键值对,还可以直接传递字符串:
我们使用 array_filter 对数组进行过滤的时候,是不会递归调用的,意思如果其中元素也是数组的时候,是不会进行同样的过滤的操作。
输出结果为:
但是我们在一些数据处理的时候,比如后台字段提交的时候,我们希望过滤掉 null 的值,如果元素也是一个关联数组的时候,我们希望关联数组元素中的 null 的值也会过滤掉。所以我们就写了 wpjam_array_filter 这个函数,实现 array_filter 递归调用:
同样的数组:
输出结果为:
PHP 的 array_filter() 函数让我们可以通过回调函数来过滤数组,但是返回的是过滤后的数组,但是很多时候,我们只是简单的要求 返回过滤之后数组的第一个元素 :
使用非常简单的:
如果我们要合并的数组是多维的关联数组,那么使用 array_merge_recursive() 函数进行合并的话,不会进行键名覆盖,而是将多个相同键名的值递归合并成一个数组。
输出结果:
其实我们希望子数组里面的相同的值覆盖,据此我们写了一个函数,用来深度合并多维数组:
相同的数组进行合并:
得到的结果是:
一般不推荐使用 wpjam_array_merge 对多维索引数组进行合并。
要从关联数组中移除并返回指定的键值,一般需要两步操作,先取出,然后 unset 数组中的键值对:
如果每次都这么操作,有点烦人,所以就把这两个步骤合成一个函数,并且还可以设置数组中无此键对应的元素的时候的默认值。
然后直接调用即可:
PHP 关联数组可以通过三种方式插入新元素:
由此可见,关联数组插入元素是无法指定位置的,只能插在最前或者最后面,所以这个函数就是实现 向关联数组插入 元素时候指定的 Key 之前 :
比如下面在 $columns 的 'author' 之前插入 ['page_title'='页面标题'] :