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

PHP 字串解析為分組陣列:以分隔符重組多維結構

     編輯:PHP 綜合知識

常見需求:將扁平字串 1|蘋果|30 1|桃子|50 2|小麥|100... 依首欄位分組,轉為多維陣列:

Array
(
    [1] => Array ( [0] => 1|蘋果|30, [1] => 1|桃子|50, ... )
    [2] => Array ( [0] => 2|小麥|100, [1] => 2|玉米|35, ... )
    ...
)

核心實作:雙層 explode + 參考賦值

<?php
$str = "1|蘋果|30 1|桃子|50 1|普通|10 2|小麥|100 2|玉米|35 2|大米|30 3|電腦|5 3|MP3|121 3|打印機|8";

// 1. 先按空白/換行分割成單條記錄
$strArray = explode("\n", $str); // 若實際為空白分隔,用 preg_split('/\s+/', $str)

// 2. 遍歷分組
$result = [];
foreach ($strArray as $item) {
    $itemArray = explode('|', $item);
    $key = $itemArray[0]; // 首欄作為分組鍵
    $result[$key][] = $item; // 直接存原字串,或存結構化陣列
}

print_r($result);

進階:解析為結構化陣列

$result = [];
foreach ($strArray as $item) {
    [$id, $name, $value] = explode('|', $item);
    $result[$id][] = [
        'id'    => (int)$id,
        'name'  => $name,
        'value' => (int)$value,
    ];
}

效能與記憶體優化

  • 若資料量極大(百萬行),避免一次 explode 全載入記憶體,改用 fopen + fgets 逐行處理。
  • 分隔符固定時,strpos + substr 比 explode 略快。
  • 結果陣列若需頻繁查詢,考慮建立索引或改用資料庫。

常見變體

輸入格式分割策略分組鍵
CSV 檔案fgetcsv()指定欄位
JSON Linesjson_decode($line, true)指定欄位
固定寬度unpack() 或 substr()指定位置

掌握「分割 → 分組 → 結構化」三步驟,靈活應對各類扁平資料轉換需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved