2012-03-09 76 views
1

如何從捲曲郵寄PHP多維數組/獲取和使用Python得到它並轉換爲多維字典:PHP數組多維Python的多維字典

要求: 網絡服務器php和cgi的支持

的Debian GNU/Linux的安裝目錄:

su 
aptitude install python-pip php5-curl 
pip install querystring-parser 
exit 

curl.class.php

<?php 
class curl 
{ 
    public static function getURL($url, $params = array(), $type = 'get', $curl_opts = array()) 
    { 
     if(!function_exists('curl_init')) 
      die('curl module missing');    

     $type = trim(strtolower($type));   
     if(is_array($params) && count($params)>0) 
      $params = self::setParams($params); 

     $ch = curl_init();    

     if($type=='post') 
     {     
      curl_setopt($ch, CURLOPT_POST, 1);   
      curl_setopt($ch, CURLOPT_POSTFIELDS, $params);   
      curl_setopt($ch, CURLOPT_URL, $url);    
     }  
     else 
      curl_setopt($ch, CURLOPT_URL, $url.$params); 

     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

     // set curl param options 
     if(is_array($curl_opts)) 
     { 
      if(count($curl_opts)>0) 
      { 
       foreach($curl_opts as $key => $value) 
        curl_setopt($ch, $key, $value); 
      }   
     }        
     $result = curl_exec($ch); 
     return $result; 
    } 

    public static function setParams($array, $type = 'get') 
    { 
     $txt = ''; 
     if(count($array)>0) 
     { 
      if($type=='get') 
       $txt.= '?'; 
      $txt.= http_build_query($array);    
     } 
     return $txt; 
    } 
} 
?> 

的index.php

<?php 
include('curl.class.php'); 
$vars = array 
(
    'aitxitxe' => array 
    (
     'aita' => array 
     (
      'semie' => 'iban', 
      'alabie' => 'maite' 
     ) 
    ) 
); 

//echo curl::getURL('http://localhost:81/python/request.py', $vars, 'post'); 
echo curl::getURL('http://localhost:81/python/request.py', $vars, 'get'); 
?> 

request.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys, cgi 
from querystring_parser import parser 

# request to dict 

form = cgi.FieldStorage() 

params = {} 
for k in form.keys(): 
    params[k] = form[k].value 

# dict to query-string 

def dict2querystring(dict): 
    text = '' 
    count = 0 
    for i in dict: 
     if count > 0: 
      text+= "&" 
     text+= str(i) + "=" + str(dict[i]) 
     count += 1 
    return text 

# request to query-string 

params_text = dict2querystring(params) 

# query-string to multi-dimensional dict 

post_dict = parser.parse(params_text) 

print "Content-type: text/plain\n" 
print post_dict 

sys.exit() 

在瀏覽器:http://localhost/index.php 格式化輸出:

{ 
    'aitxitxe': 
    { 
    'aita': 
    { 
     'alabie': 'maite', 
     'semie': 'iban' 
    } 
    } 
} 

THA對於NKS:允許Django, Python: Is there a simple way to convert PHP-style bracketed POST keys to multidimensional dict?

改進,謝謝;)

+0

這裏似乎沒有問題,只是一堆代碼。 – rjmunro 2012-03-09 11:57:45

回答