首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 陣列平均分組演算法實作

     編輯:PHP 綜合知識

功能需求

將陣列依指定組數平均分配,餘數元素分配至前幾組。例如 10 元素分 3 組 → 4, 3, 3。

優化版實作


/**
 * 陣列平均分組
 * 
 * @param array  $array     待分割陣列
 * @param int    $groupNum  分組數 (正整數)
 * @return array 分組後的二維陣列
 */
function splitArray(array $array, int $groupNum): array
{
    // 參數驗證
    if (empty($array) || $groupNum <= 0) {
        return [];
    }
    
    $groupNum = min($groupNum, count($array));  // 組數不超過元素數
    $total = count($array);
    $baseSize = (int)($total / $groupNum);      // 基礎大小
    $remainder = $total % $groupNum;            // 餘數
    
    $result = [];
    $offset = 0;
    
    for ($i = 0; $i < $groupNum; $i++) {
        // 前 $remainder 組多分配 1 個元素
        $size = $baseSize + ($i < $remainder ? 1 : 0);
        $result[] = array_slice($array, $offset, $size);
        $offset += $size;
    }
    
    return $result;
}

// 測試
$data = range(1, 10);  // [1,2,3,4,5,6,7,8,9,10]
print_r(splitArray($data, 3));
/*
Array
(
    [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
    [1] => Array ( [0] => 5 [1] => 6 [2] => 7 )
    [2] => Array ( [0] => 8 [1] => 9 [2] => 10 )
)
*/

演算法解析

  • 基礎大小:`floor(總數 / 組數)`
  • 餘數分配:前 `餘數` 組各 +1,確保差異最多為 1
  • 單一迴圈:O(n) 時間複雜度,記憶體效率佳
  • 保持順序:原陣列順序完整保留

對比原版本優化點

項目原版本優化版
程式碼行數~60 行~25 行
迴圈次數多重巢狀單一 for 迴圈
記憶體操作多次 unset/push單次 array_slice
可讀性較難理解邏輯清晰

實際應用場景

  • 分頁資料平均分配到多個 Worker 處理
  • 大量資料批次匯入分批次
  • 負載平衡:任務平均分派
  • 前端多欄佈局資料分組
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved