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

PHP 多維陣列轉換為 CURL 支援的一維格式實作

     編輯:PHP 綜合知識

需求背景

在使用 PHP cURL 發送 POST 請求時,若資料為多維陣列需先扁平化為 key[subkey]=value 格式,方能被遠端伺服器正確解析(如 PHP 端 $_POST 自動解析)。

遞迴轉換函式實作

<?php
/**
 * 多維陣列轉換為支援 cURL 提交的一維陣列
 * @param array $params 待轉換陣列
 * @param string $pre 遞迴用前綴鍵名
 * @return array 扁平化後的關聯陣列
 */
function toPost(array $params = [], $pre = '') {
    $result = [];
    foreach ($params as $key => $val) {
        if (is_array($val)) {
            // 遞迴處理子陣列,構建新前綴:parent[child]
            $subPre = ($pre === '') ? $key : $pre . '[' . $key . ']';
            $result = array_merge($result, toPost($val, $subPre));
        } else {
            // 葉子節點,直接組合鍵名
            $result[$pre . '[' . $key . ']'] = $val;
        }
    }
    return $result;
}

使用範例

<?php
$data = [
    'user' => [
        'name' => 'John',
        'contact' => [
            'email' => 'john@example.com',
            'phone' => '1234567890'
        ]
    ],
    'action' => 'register'
];

$postData = toPost($data);
/*
結果:
[
    'user[name]'          => 'John',
    'user[contact][email]' => 'john@example.com',
    'user[contact][phone]' => '1234567890',
    'action'              => 'register'
]
*/

// cURL 發送
$ch = curl_init('https://api.example.com/endpoint');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); // 或直接傳陣列
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

核心邏輯解析

  1. 遞迴終止條件:遇到非陣列值時輸出鍵值對。
  2. 鍵名累積:透過 $pre 參數逐層疊加 [key] 結構。
  3. 陣列合併:使用 array_merge 將各層級結果扁平化。

注意事項

  • 鍵名不可包含特殊字元(如 [ ]),否則解析時會產生歧義。
  • 若需支援檔案上傳(CURLFile),需額外處理,不可直接扁平化。
  • PHP 5.4+ 可使用短陣列語法 [] 簡化程式碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved