2012-01-24 8 views
6

Mam projektu przy użyciu Pythona i chcę przekonwertować php do Pythona. Mam mylony w tablicy php w przekształcenie go do pytona ...Tablica w php i dict w python są takie same?

w starym kodzie php ... wygląda to tak,

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

i to, co zrobiłem w przekształcaniu to do python ...

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

jest mój konwersja php do Pythona jest poprawna?

Odpowiedz

12

Konwersja jest zasadniczo poprawna (chociaż nie użyłbym dict jako nazwy zmiennej, ponieważ maskuje ona wbudowany konstruktor klasy o tej samej nazwie). Mając na uwadze powyższe, PHP arrayszamówione mapowania, więc należy użyć Python OrderedDict zamiast regularnej dict tak, że kolejność wkładania zostaje zachowana:

>>> 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

Mówiąc konkretnie, PHP asocjacyjne tablica jest taki sam jak słownik Python, a tablica asocjacyjna PHP jest zamówiona. Tablice mieszania ruby ​​są takie same jak tablice asocjacyjne PHP (uporządkowane pary klucz-wartość).

Listy Pythona i tablice PHP są takie same (nieuporządkowane listy wartości bez klucza). Tablice Ruby są takie same jak w Pythonie i PHP.

0

tablice PHP różnią się od Py obiektów:

  • klucze PHP mogą być liczbami całkowitymi lub łańcuchy (asocjacyjne)
  • gdy wartość jest dołączony do macierzy, co jest kluczowym numeryczna jest automatycznie przypisany uprzednio dołączanie pary klucz/wartość do tablicy. Przypisany związany klucz ma wartość całkowitą, która jest równa maksymalnej wewnętrznych kluczy tablicowych indeks iteracyjnej numeryczny plus 1,
  • Klawisze numeryczne całkowitą w ciągu są odlewane na liczby,
  • Kolejność wprowadzania do tablicy jest zachowana . pary klucz/wartość są iterowane zgodnie z kolejnością wstawiania klawiszy. Możemy użyć Pythona OrderedDict naśladować,
  • PHP array[] = 5 jest tłumaczona na Pythonie array.append(5) lub array[None] = 5,
  • Klucze indeks iterator są manipulowane przez PHP funkcje wbudowane lub są przekazywane przez referencję, z kopią na napisz zasadę.

Chciałbym dać wtyczkę do mojego niedawno wydanego produktu moduł Python pyx.php. Istnieje klasa Pythona array w module emulującym tablicę PHP. Nasza emulacja języka Python w tablicy PHP używa zmiennej instancji OrderedDict, , gdzie array._obj to narzędzie OrderedDic do przechowywania wszystkich elementów tablicy i śledzenie ich kolejności wstawiania przy użyciu niestandardowej zmiennej instancji wskaźnika .Spróbuj:

$ 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() prace dla macierzy o różnej 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 

array() w module pyx.php Cython oferuje prawie wszystko, co tablicą PHP(), a także oferuje wiele innych metod. Patrz: https://wordpy.com/pyx/php/.

Obecnie pyx.php jest dostępny tylko dla Pythona 3.x z 64-bitowym systemem Linux. Python 2.x, Mac lub inne platformy można kompilować, gdy istnieje wiele żądań .

Powiązane problemy