2012-01-24 58 views
6

我有一個項目使用python,我想將php轉換爲python。我混淆PHP的陣列在將其轉換爲蟒...php中的數組和python中的dict是一樣的嗎?

在PHP的舊代碼

...它看起來像這樣,

array(
     "Code"   => 122, 
     "Reference"  => 1311, 
     "Type"   => 'NT', 
     "Amount"  => 100.00 
); 

,這是我在做轉換它蟒蛇...

dict = { 
      "Code":122, 
      "Reference":1311, 
      "Type":'NT', 
      "Amount":100.00 
} 

是我的轉換PHP到Python是正確的?

回答

12

您的轉換基本上是正確的(儘管我不會使用字典作爲變量名稱,因爲它掩蓋了具有相同名稱的內置類構造函數)。話雖這麼說,PHP arrays有序映射,所以你應該使用一個Python OrderedDict而不是常規的字典中,這樣的插入順序被保留:

>>> import collections 
>>> od = collections.OrderedDict([ 
     ('Code', 122), 
     ('Reference', 1311), 
     ('Type', 'NT'), 
     ('Amount', 100.00), 
]) 

>>> print od['Amount'] 
100.0 

>>> od.keys() 
['Code', 'Reference', 'Type', 'Amount'] 
0

具體而言,一個PHP 關聯陣列是與Python字典相同,並且PHP關聯數組爲,訂購數量爲。 Ruby哈希表與PHP關聯數組(有序鍵 - 值對)相同。

Python列表和PHP數組是相同的(無序列表的非鍵值)。 Ruby數組與Python和PHP相同。

0

PHP陣列是從PY對象不同:

  • PHP密鑰可以是整數或字符串(締合),
  • 當值被附加到陣列,數字鍵自動是 之前分配將鍵/值對附加到數組。 所分配的相關聯的密鑰具有等於所述陣列的內部數字迭代索引關鍵字的最大 加1的整數值,在串
  • 數值整數鍵被鑄造成整體,
  • 插入到陣列的順序被保留。鍵/值對是根據鍵的插入順序迭代的 。我們可以使用Python OrderedDict效仿,
  • PHP array[] = 5被翻譯到Python array.append(5)array[None] = 5
  • 迭代器的索引鍵都是通過PHP內置的功能操作,或 按引用傳遞,並抄送上寫政策。

我想插一下我剛發佈的產品pyx.php Python模塊。 模塊中有一個模擬PHP數組的Python類array。 我們的PHP數組的Python模擬使用OrderedDict實例變量, 其中array._obj是一個OrderedDic來存儲數組的所有元素,並使用自定義指針實例 變量跟蹤它們的插入順序。嘗試:

$ git clone https://github.com/wordpy/pyx/ 
$ python # or ipython` 

>>> import pyx.php as Php; array = Php.array 
>>> arr1 = array((0,'1-0'),('a','1-a'),('b','1-b'),) 
>>> arr2 = array((0,'2-0'),( 1,'2-1'),('b','2-b'),('c','2-c'),) 
>>> arr1 + arr2 # same as: Php.array_plus(arr1, arr2), see below 
>>> Php.array_merge(arr1, arr2) 

>>> import pyx.php as Php; array = Php.array 
>>> Arr0 = array() # Arr0._obj is an empty OrderedDict() 
>>> Arr1 = array(('a',11), 'zzz', (99,99), 22, 33, (2,22)) 
>>> Arr1 
array(6) { 
    ['a']=> <int> 11 
    [0]=> <str> zzz 
    [99]=> <int> 99 
    [100]=> <int> 22 
    [101]=> <int> 33 
    [2]=> <int> 22 
} 

zip()適用於不同len的數組!

>>> for i,j in zip(array(1,2,3,4), array(11,22,33)): 
... print(i,j) 
1 11 
2 22 
3 33 
>>> for i,j in zip(array(1,2), array(11,22,33)): 
... print(i,j) 
1 11 
2 22 

pyx.php用Cython模塊array()提供了幾乎一切 一個PHP數組()提供,以及許多其他的方法。 請參閱https://wordpy.com/pyx/php/

目前,pyx.php僅適用於運行64位Linux的Python 3.x。 有很多 請求時,可以編譯Python 2.x,Mac或其他平臺。

相關問題