$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];
$arr = Array(
[0] => Array
(
[advertiser_id] => 1
[valid_clicks_count] => 4
[conversions_count] => 2
[revenue] => 0.40
[invalid_clicks_count] => 3
[raw] => 7
[advertiser_name] => Ad1
)
)
以上二維數(shù)組中的一維數(shù)組的鍵根據(jù)$sort的值進行排序
現(xiàn)有兩種方式:
方式一:
創(chuàng)建一個新的數(shù)組,循環(huán)賦值,再注銷掉原來的數(shù)組
$newArr = [];
foreach ($arr as $key => $val){
$newArr[$key]['advertiser_id'] = $val['advertiser_id'];
$newArr[$key]['advertiser_name'] = $val['advertiser_name'];
$newArr[$key]['raw'] = $val['raw'];
$newArr[$key]['valid_clicks_count'] = $val['valid_clicks_count'];
$newArr[$key]['invalid_clicks_count'] = $val['invalid_clicks_count'];
$newArr[$key]['conversions_count'] = $val['conversions_count'];
$newArr[$key]['revenue'] = $val['revenue'];
}
unset($exportData);
效果符合期望:
Array
(
[0] => Array
(
[advertiser_id] => 1
[advertiser_name] => Ad1
[raw] => 7
[valid_clicks_count] => 4
[invalid_clicks_count] => 3
[conversions_count] => 2
[revenue] => 0.40
)
)
測試運行時間和空間的數(shù)據(jù)
開始內(nèi)存:377704Array
(
[0] => Array
(
[advertiser_id] => 1
[advertiser_name] => Ad1
[raw] => 7
[valid_clicks_count] => 4
[invalid_clicks_count] => 3
[conversions_count] => 2
[revenue] => 0.40
)
)
<br />[頁面執(zhí)行時間:3.9815902709961E-5 ]秒<br />運行后內(nèi)存:378800回到正常內(nèi)存:378800
方式二:適用php的內(nèi)置函數(shù) array_flip,array_replace
$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];
foreach ($data as &$val){
$val = (array_replace(array_flip($sort), $val));
}
效果符合期望值
開始內(nèi)存:376088Array
(
[0] => Array
(
[advertiser_id] => 1
[advertiser_name] => Ad1
[raw] => 7
[valid_clicks_count] => 4
[invalid_clicks_count] => 3
[conversions_count] => 2
[revenue] => 0.40
)
)
<br />[頁面執(zhí)行時間:2.1934509277344E-5 ]秒<br />運行后內(nèi)存:376728回到正常內(nèi)存:376728
經(jīng)過多次測試,兩者運行平均時間相差不大,可忽略,運行內(nèi)存消耗方式一大于方式二,推薦用方式二來處理。
PS:測試腳本
<?php
echo '開始內(nèi)存:'.memory_get_usage(), '';
$stime=microtime(true); //獲取程序開始執(zhí)行的時間
$data = '[{"advertiser_id":1,"valid_clicks_count":4,"conversions_count":2,"revenue":"0.40","invalid_clicks_count":3,"raw":7,"advertiser_name":"Ad1"}]';
$data = json_decode($data, true);
//方式一:
$sortExportData = [];
foreach ($data as $key => $val){
$sortExportData[$key]['advertiser_id'] = $val['advertiser_id'];
$sortExportData[$key]['advertiser_name'] = $val['advertiser_name'];
$sortExportData[$key]['raw'] = $val['raw'];
$sortExportData[$key]['valid_clicks_count'] = $val['valid_clicks_count'];
$sortExportData[$key]['invalid_clicks_count'] = $val['invalid_clicks_count'];
$sortExportData[$key]['conversions_count'] = $val['conversions_count'];
$sortExportData[$key]['revenue'] = $val['revenue'];
}
print_r($sortExportData);
unset($data);
//方式二:
$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];
foreach ($data as &$val){
$val = (array_replace(array_flip($sort), $val));
}
print_R($data);
$etime=microtime(true);//獲取程序執(zhí)行結束的時間
$total=$etime-$stime; //計算差值
echo "<br />[頁面執(zhí)行時間:{$total} ]秒".'<br />';
echo '運行后內(nèi)存:'.memory_get_usage(), '';
unset($tmp);
echo '回到正常內(nèi)存:'.memory_get_usage();