```php
<?php
/**
* 多維數組合并排序
* @param $arr
* @return array
*/
function mergeMultiSortArray($arr) {
$data = [];
$arrPoint = [];
foreach ($arr as $k => $v) {
$arrPoint[$k] = 0; // 為每個數組初始化指針,指向第一個位置,0表示
}
while (!empty($arr)) {
$arrIndex = null;
$min = null;
foreach ($arr as $k => $v) { // 比較每個數組指針指向的元素
$vIndex = $arrPoint[$k];
$vValue = $v[$vIndex];
if ($min == null || $vValue < $min) {
$min = $vValue;
$arrIndex = $k;
}
}
$data[] = $min;
$arrPoint[$arrIndex]++; // 移動數組元素指針
if (count($arr[$arrIndex]) <= $arrPoint[$arrIndex]) { // 指針已經指向數組元素最后一位,則刪除數組
unset($arr[$arrIndex]);
}
}
return $data;
}
$t1 = microtime(true);
$arr = array(
array(3, 10, 100, 101, 103, 105, 109, 123, 145),
array(2, 30, 70),
array(4, 6, 9)
);
$data = mergeMultiSortArray($arr);
echo "耗時: " . (microtime(true) - $t1) . PHP_EOL;
print_r($data);
```
```bash
耗時: 8.7976455688477E-5
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 6
[4] => 9
[5] => 10
[6] => 30
[7] => 70
[8] => 100
[9] => 101
[10] => 103
[11] => 105
[12] => 109
[13] => 123
[14] => 145
)
```
- php
- 編譯安裝
- 基本概念
- 垃圾回收機制
- 生命周期
- zval底層實現
- c擴展開發
- gdb調試工具
- 自定義擴展簡單demo
- 鉤子函數
- 讀取php.ini配置
- 數組
- 函數
- 類
- yaf擴展底層源碼
- swoole擴展底層源碼
- memoryGlobal內存池
- swoole協程使用記錄
- 單點登錄sso原理
- compser使用
- session實現機制
- c & linux
- gcc
- 指針
- 結構體,聯合和位字段
- 宏定義井號說明
- printf家族函數和可變參數
- 共享函數
- 靜態庫和動態庫
- makefile自動化構建
- 信號一
- 信號二
- inotify監控文件事件
- socket編程
- 簡介
- UNIX DOMAIN
- Internet DOMAIN
- TCP/IP
- 文件IO多路復用
- 內存管理
- 進程組,會話和控制終端
- daemon守護進程
- 多進程
- 多線程
- 常用進制轉換
- go
- 入門知識
- 字節和整數裝換
- python
- redis
- 應用場景
- 消息隊列
- 熱點數據
- 掃碼登錄
- 訂閱發布
- 次數限制
- 搶購超賣
- 持久化機制
- mysql
- 工作流程
- MyISAM和InnoDB區別
- 用戶和權限管理
- 執行計劃
- sql優化
- 事務和鎖
- 慢查詢日志
- case...when...then...end用法
- sql
- 參考
- linux
- 內核參數優化
- 防火墻設置
- docker
- docker入門知識
- 算法
- 多維數組合
- DFA算法
- 紅包金額分配