2012-01-24 30 views
6

Tôi có một dự án sử dụng python và tôi muốn chuyển đổi php sang python. Tôi đã nhầm lẫn trong mảng của php trong chuyển đổi nó để trăn ...mảng trong php và dict trong python là như nhau?

trong các mã cũ của php ... nó trông như thế này,

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

và đây là những gì tôi đã làm trong chuyển đổi nó để trăn ...

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

là php chuyển đổi của tôi để python là đúng?

Trả lời

12

Chuyển đổi của bạn về bản chất là chính xác (mặc dù tôi sẽ không sử dụng dict làm tên biến vì mặt nạ đó là trình tạo lớp có sẵn cùng tên). Điều đó đang được nói, PHP arraysra lệnh ánh xạ, vì vậy bạn nên sử dụng một Python OrderedDict thay vì một dict thường xuyên để các thứ tự chèn được bảo quản:

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

Để cụ thể, một PHP kết mảng là giống như từ điển Python và mảng kết hợp PHP là đã ra lệnh. Các bảng băm Ruby giống như các mảng kết hợp PHP (các cặp khóa-giá trị đã đặt hàng).

Danh sách Python và mảng PHP giống nhau (danh sách không có thứ tự của các giá trị không có khóa). Các mảng Ruby giống như Python và PHP.

0

mảng PHP là khác nhau từ các đối tượng py rằng:

  • phím PHP có thể là các số nguyên hoặc chuỗi (kết hợp),
  • Khi một giá trị được nối vào một mảng, một phím số tự động là giao trước chắp thêm cặp khóa/giá trị vào mảng. Chìa khóa liên quan đến giao có giá trị số nguyên bằng đến mức tối đa các phím chỉ số iterator số nội bộ của mảng cộng 1,
  • phím số nguyên Numeric trong chuỗi được đúc thành các số nguyên,
  • Trình tự chèn vào mảng được bảo tồn . cặp khóa/giá trị là được lặp lại theo thứ tự chèn của các phím. Chúng ta có thể sử dụng OrderedDict Python để thi đua,
  • PHP array[] = 5 được phiên dịch sang Python array.append(5) hoặc array[None] = 5,
  • Các phím index iterator được thao tác thông qua PHP chức năng built-in, hoặc được truyền bằng tham chiếu, với một bản sao trên viết chính sách.

Tôi muốn đưa phích cắm vào sản phẩm mới phát hành pyx.php Mô-đun Python của tôi. Có một lớp Python array trong mô-đun mô phỏng một mảng PHP. Giả lập Python của chúng ta trong mảng PHP sử dụng biến thể OrderedDict, nơi array._obj là một OrderedDic để lưu trữ tất cả các phần tử của mảng và theo dõi các đơn đặt hàng của chúng bằng cách sử dụng một biến con trỏ tùy chỉnh .Hãy thử:

$ 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() hoạt động cho mảng với các loại len khác nhau !!!

>>> 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() trong module pyx.php Cython cung cấp gần như tất cả mọi thứ mà một mảng PHP() cung cấp, cộng với nhiều phương pháp hơn. Vui lòng xem https://wordpy.com/pyx/php/.

Hiện tại, pyx.php chỉ khả dụng cho Python 3.x chạy Linux 64 bit. Python 2.x, Mac hoặc các nền tảng khác có thể được biên dịch khi có nhiều yêu cầu .

Các vấn đề liên quan