是不是你的代碼忘寫了點,要不你可以和我去后盾人平臺看看相關(guān)教材,多看幾遍,慢慢的這樣不就會了,希望能幫到你,給個采納吧謝謝(つ???)つ
成都創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報價,主機(jī)托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
foreach($array?as?$v){//$array?是要重組的數(shù)組
$val1[]?=?$v[0];
$val2[]?=?$v[1];
$val3[]?=?$v[2];
$val4[]?=?$v[3];
}
//生成4個同類數(shù)組
直接給你上代碼和效果了。
建議1:合計最后一行可以讓前端處理。
建議2:下次在發(fā)問題的時候,把所有場景的數(shù)組已文本的形式貼在問題里,不然在給你解決問題的過程中數(shù)據(jù)部分都得照著你的圖片打出來(坑~)
效果圖:
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?標(biāo)題
$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);
/**
*?組合新數(shù)組
*/
$listsArray?=?[];
$sumArray?=?[];
foreach?($array?as?$key?=?$val)?{
$date?=?date('Y-m-d',?strtotime($val['create_time']));
//?列表
if?(isset($listsArray[$val['name']][$date]))?{
//?如果某人一天多次進(jìn)行累加
$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']))?{?//?如果當(dāng)天日期沒有的設(shè)置為?0
$sumArray[$date]['sum']?=?0.00;
}
$sumArray[$date]['sum']?=?bcadd($sumArray[$date]['sum'],?$val['receivable_balance'],?2);
}
$table?=?"table?border='1'";
//?標(biāo)題行開始
$table?.=?"tr";
$table?.=?"td序號/tdtd業(yè)務(wù)員/td";
foreach?($dates?as?$date)?{
$table?.=?"td"?.?$date?.?"/td";
}
$table?.=?"/tr";
//?標(biāo)題行結(jié)束
//?列表數(shù)據(jù)開始
$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++;
}
//?//?列表數(shù)據(jù)結(jié)束
//?合計數(shù)據(jù)開始
$table?.=?"tr";
$table?.=?"tdnbsp;/tdtd合計:/td";
foreach?($dates?as?$date)?{
$table?.=?"td"?.?$sumArray[$date]['sum']?.?"/td";
}
$table?.=?"/tr";
//?合計數(shù)據(jù)結(jié)束
$table?.=?"/table";
echo?$table;
1、從給出的3個數(shù)組標(biāo)本,到形成最后的合并數(shù)組,沒有現(xiàn)成的函數(shù),只能編寫代碼逐條記錄手工合并。
2、從單個數(shù)組到合并數(shù)組,并沒有類似 1+1=2 的邏輯關(guān)系,比如:
val3 和 var4 在合并數(shù)組里是 val1 的成員,而這種關(guān)系在給出的標(biāo)本里完全看不到。
從合并數(shù)組看, val 包含 val1 和 val2,這種關(guān)系怎么得到的?
?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 有很多非常好用的數(shù)組處理函數(shù),PHP 數(shù)組函數(shù)官方文檔都有 80 多個,但是在使用過程,有一些數(shù)組的操作使用比較多,我就把這些函數(shù)整理成工具函數(shù),然后整合到 WPJAM Basic 中,方便自己的二次開放時候使用,現(xiàn)在整理放出來,如果你和我一樣基于 WPJAM Basic 進(jìn)行二次開發(fā),也可以使用:
PHP 從關(guān)聯(lián)數(shù)組中移除指定的鍵值對,一般使用 unset 函數(shù),比如:
如果要移除多個鍵值對,就要調(diào)用多次的 unset 函數(shù),所以就合并成一個函數(shù) :
這樣就可以通過下面方式移除鍵值對了:
如果僅僅移除一個鍵值對,還可以直接傳遞字符串:
我們使用 array_filter 對數(shù)組進(jìn)行過濾的時候,是不會遞歸調(diào)用的,意思如果其中元素也是數(shù)組的時候,是不會進(jìn)行同樣的過濾的操作。
輸出結(jié)果為:
但是我們在一些數(shù)據(jù)處理的時候,比如后臺字段提交的時候,我們希望過濾掉 null 的值,如果元素也是一個關(guān)聯(lián)數(shù)組的時候,我們希望關(guān)聯(lián)數(shù)組元素中的 null 的值也會過濾掉。所以我們就寫了 wpjam_array_filter 這個函數(shù),實現(xiàn) array_filter 遞歸調(diào)用:
同樣的數(shù)組:
輸出結(jié)果為:
PHP 的 array_filter() 函數(shù)讓我們可以通過回調(diào)函數(shù)來過濾數(shù)組,但是返回的是過濾后的數(shù)組,但是很多時候,我們只是簡單的要求 返回過濾之后數(shù)組的第一個元素 :
使用非常簡單的:
如果我們要合并的數(shù)組是多維的關(guān)聯(lián)數(shù)組,那么使用 array_merge_recursive() 函數(shù)進(jìn)行合并的話,不會進(jìn)行鍵名覆蓋,而是將多個相同鍵名的值遞歸合并成一個數(shù)組。
輸出結(jié)果:
其實我們希望子數(shù)組里面的相同的值覆蓋,據(jù)此我們寫了一個函數(shù),用來深度合并多維數(shù)組:
相同的數(shù)組進(jìn)行合并:
得到的結(jié)果是:
一般不推薦使用 wpjam_array_merge 對多維索引數(shù)組進(jìn)行合并。
要從關(guān)聯(lián)數(shù)組中移除并返回指定的鍵值,一般需要兩步操作,先取出,然后 unset 數(shù)組中的鍵值對:
如果每次都這么操作,有點煩人,所以就把這兩個步驟合成一個函數(shù),并且還可以設(shè)置數(shù)組中無此鍵對應(yīng)的元素的時候的默認(rèn)值。
然后直接調(diào)用即可:
PHP 關(guān)聯(lián)數(shù)組可以通過三種方式插入新元素:
由此可見,關(guān)聯(lián)數(shù)組插入元素是無法指定位置的,只能插在最前或者最后面,所以這個函數(shù)就是實現(xiàn) 向關(guān)聯(lián)數(shù)組插入 元素時候指定的 Key 之前 :
比如下面在 $columns 的 'author' 之前插入 ['page_title'='頁面標(biāo)題'] :