将Python列表传递给php
我对php非常陌生,我花了不少时间来理解如何将参数从Python传递到php,反之亦然。 我现在知道如何传递单个变量,但我仍然被卡住了,似乎找不到这个问题的答案: Php调用一个Python脚本(该部分工作),该脚本返回字符串列表。我想用php处理这个列表 当我尝试时:将Python列表传递给php,php,python,parameter-passing,Php,Python,Parameter Passing,我对php非常陌生,我花了不少时间来理解如何将参数从Python传递到php,反之亦然。 我现在知道如何传递单个变量,但我仍然被卡住了,似乎找不到这个问题的答案: Php调用一个Python脚本(该部分工作),该脚本返回字符串列表。我想用php处理这个列表 当我尝试时: print mylist 在myscript.py中,然后: $result = exec('python myscript.py') 看起来php将$result理解为单个字符串(我同意这是有意义的) 我知道json可能会
print mylist
在myscript.py中,然后:
$result = exec('python myscript.py')
看起来php将$result理解为单个字符串(我同意这是有意义的)
我知道json可能会有所帮助,或者我需要使用字典而不是python中的列表。但是我不知道到底是怎么回事
如果有人能帮忙,我们将不胜感激!谢谢 例如:
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'];
您正在使用stdin/stdout在程序之间传输数据,这意味着您必须以某种方式对结构进行编码,以便让接收程序解析元素
最简单的方法是让python输出一个逗号分隔的列表
亚当,巴里,凯恩
和使用
$result = explode(exec('python myscript.py'));
在php端,将字符串数据转换回数组
如果数据不可预测(可能包含逗号)或更结构化(不仅仅是一个简单的列表),那么您应该按照Krab的建议选择类似json的内容。显然您的问题具有误导性。被重定向到这里,认为这是一个将python列表转换为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"
)
)
为那些想要将列表转换为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"
)
)
输出
Array
(
[0] => element1
[1] => element2
[2] => element3
)
谢谢你的快速回答!我可以看出我做错了什么:我以为我在传递一个列表,而实际上我正试图传递一个numpy数组。请注意,这不适用于json!再次感谢!好吧,这也是有道理的。您是否建议尽可能避免使用json?这可能与安全性或处理时间有关吗?我只是在这些方面有一些可怕的想法…一点也不。。。如果您在做简单列表之外的任何事情,甚至可能是在做简单列表,那么您应该使用json或xml之类的东西。通常有一些库可以使编码/解码相当简单。我在简单的列表中更多地展示了通过流(file/stdin/http)在程序之间传递“数组”的原理,明白了!感谢您对新手的教育:)