2013-06-21 15 views
5

私はPHPにはとても新しいので、PythonからPHPへの引数を逆に渡す方法をよく理解しています。 私は今、単一の変数を渡す方法を知っていますが、私はまだ固執しており、これに対する答えを見つけることができないようです。phpへのPythonリストの受け渡し

Phpは文字列のリストを返すPythonスクリプトを呼び出します。私はこのリストをPHPで処理したいと思います。その後、myscript.pyに

print mylist 

、および:

は私がしようとすると、それは、PHPのように見える

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

は(私は理にかなって同意)単一の文字列として$結果を理解しています。

私は多分jsonが助けることができる、または私は何とかPythonのリストの代わりに辞書を使用する必要があることを理解します。しかし、私は正確にどのように把握することはできません。

誰でも助けていただければ幸いです。ありがとう!例えば

答えて

9

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

ありがとうございました!私が間違っていたことが分かります。私が実際に数の少ない配列を渡そうとしていたときにリストを渡していると思いました。レコードのために、それはjsonとはうまくいきません!再度、感謝します! – cenna75

1

あなたは、プログラム間でデータを転送するために標準入力/標準出力を使用しています、つまり、受信したプログラムをpにするために構造を何とかエンコードする必要があります要素を取り除く。

最も簡単な方法は、

アダム、バリー、カイン

とが回転し、PHP側で

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

を使用カンマ区切りリストのようなPythonの出力に何かを持っているだろうあなた文字列データを配列に戻します。

データが予測できない(コンマを含むかもしれない)か、より構造化されている(単純なリスト以上である)場合は、Krabが提案するようなjsonのようなものに行ってください。

+0

申し訳ありませんが、それは意味があります。可能であればjsonを避けるべきだと提案していますか?多分セキュリティや処理時間と関係がありますか?私はこれらの分野でひどい概念しか持っていません... – cenna75

+0

全くありません...単純なリストを超えて何かをやっているのなら、単純なリストを行っていても、jsonやxmlのようなものを使うべきです。そして、通常、エンコード/デコードをかなり簡単にするライブラリがあります。ストリーム(ファイル/ stdin/http)を介してプログラム間で '配列'を渡す原則を実証するために単純なリストに入れていました – Loopo

+0

入手しました!初心者を教えてくれてありがとう:) – cenna75

0

あなたの質問は誤解を招くようでした。ここでリダイレクトされたのは、これをPythonリストをPHP配列に変換するための解決策です。

リストを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" 
    ) 

) 
関連する問題