2013-06-21 12 views
5

Jestem bardzo nowy w php i spędziłem sporo czasu na zrozumieniu, jak przekazywać argumenty z Pythona do php i odwrotnie. Teraz wiem, jak przekazywać pojedyncze zmienne, ale nadal utknąłem i nie mogę znaleźć odpowiedzi na to:Przekazywanie listy w języku Python do php

Php wywołuje skrypt Pythona (ten fragment działa), który zwraca listę napisów. Chciałbym przetworzyć tę listę w php.

Kiedy próbuję:

print mylist 

w myscript.py, a następnie:

$result = exec('python myscript.py') 

wygląda php rozumie $ wynik jako jeden ciąg znaków (które zgadzam sens).

Rozumiem, że być może json może pomóc lub że w jakiś sposób muszę użyć słownika zamiast listy w pythonie. Jednak nie wiem, jak dokładnie.

Jeśli ktokolwiek może pomóc, będzie to bardzo cenne! Dzięki!

Odpowiedz

9

Na przykład:

myscript.py

import json 

D = {'foo':1, 'baz': 2} 

print json.dumps(D) 

myscript.php

<?php 

$result = json_decode(exec('python myscript.py'), true); 
echo $result['foo']; 
+0

Dzięki za szybką odpowiedź! Mogę zobaczyć, co zrobiłem źle: Myślałem, że przekazuję listę, kiedy faktycznie próbowałem przekazać tablicę numpy. Dla przypomnienia, to nie działa z jsonem! Dzięki jeszcze raz! – cenna75

1

Używasz stdin/stdout do przesyłania danych pomiędzy programami, oznacza to, że musisz jakoś zakodować strukturę, aby pozwolić programowi odbierania p osioł elementy.

Najprostszą rzeczą byłoby mieć wyjściową pyton coś w rodzaju listy przecinkami oddzielone

Adam, Barry, Cain

i korzystania

$result = explode(exec('python myscript.py')); 

po stronie php, aby włączyć łańcuch danych z powrotem do tablicy.

Jeśli dane są nieprzewidywalne (mogą zawierać przecinki) lub są bardziej uporządkowane (więcej niż prosta lista), powinieneś wybrać coś w stylu json, jak sugeruje Krab.

+0

W porządku, to ma również sens. Sugerujesz, że json należy unikać, gdy to możliwe? Czy to może mieć związek z bezpieczeństwem lub czasem przetwarzania? Mam tylko okropne pojęcia w tych dziedzinach ... – cenna75

+0

wcale nie ...jeśli robisz coś poza prostą listą, a może nawet robisz prostą listę, powinieneś użyć czegoś takiego jak json lub xml. Zwykle dostępne są biblioteki umożliwiające dość proste kodowanie/dekodowanie. Bardziej wpisałem prostą listę, aby zademonstrować zasadę przekazywania "tablic" między programami za pośrednictwem strumienia (file/stdin/http) – Loopo

+0

Mam to! Dzięki za kształcenie początkującego :) – cenna75

0

Podobno twoje pytanie było mylące. Przekierowano tu myśląc, że to rozwiązanie do konwersji list Pythona na tablicę php.

Publikowanie naiwnego rozwiązania dla tych, którzy chcą konwertować listy na tablicę php.

// Sample python list 
$data = '[["1","2","3","4"],["11","12","13","14"],["21","22","23","24"]]'; 

// Removing the outer list brackets 
$data = substr($data,1,-1); 

$myArr = array(); 
// Will get a 3 dimensional array, one dimension for each list 
$myArr =explode('],', $data); 

// Removing last list bracket for the last dimension 
if(count($myArr)>1) 
$myArr[count($myArr)-1] = substr($myArr[count($myArr)-1],0,-1); 

// Removing first last bracket for each dimenion and breaking it down further 
foreach ($myArr as $key => $value) { 
$value = substr($value,1); 
$myArr[$key] = array(); 
$myArr[$key] = explode(',',$value); 
} 

//Output 
Array 
(
[0] => Array 
    (
     [0] => "1" 
     [1] => "2" 
     [2] => "3" 
     [3] => "4" 
    ) 

[1] => Array 
    (
     [0] => "11" 
     [1] => "12" 
     [2] => "13" 
     [3] => "14" 
    ) 

[2] => Array 
    (
     [0] => "21" 
     [1] => "22" 
     [2] => "23" 
     [3] => "24" 
    ) 

)