我对php非常陌生,而且我已经花了很多时间来理解如何将参数从Python传递到php,反之亦然。我现在知道如何传递单个变量,但我仍然卡住了,似乎无法找到这个答案:
Php调用Python脚本(该部分有效),返回字符串列表。我想在php中处理这个列表。
当我尝试:
print mylist
在myscript.py中,然后:
$result = exec('python myscript.py')
看起来像php将$ result理解为单个字符串(我同意这是有道理的)。
我知道也许json可以帮助或者我在某种程度上需要使用字典而不是python中的列表。但是我无法弄清楚到底是怎么回事。
如果有人可以提供帮助,我们将不胜感激!谢谢!
例如:
没有script.朋友
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数组的解决方案。
为想要将列表转换为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"
)
)
$str = "[u'element1', u'element2', 'element3']";
$str = str_replace( array("u'", "[", "]"), array("'", ""), $str );
$strToPHPArray = str_getcsv($str, ",", "'");
print_r( $strToPHPArray );
输出
Array
(
[0] => element1
[1] => element2
[2] => element3
)