将 Python 列表传递给 php
Posted
技术标签:
【中文标题】将 Python 列表传递给 php【英文标题】:Passing a Python list to php 【发布时间】:2013-06-18 14:21:30 【问题描述】:我对 php 非常陌生,并且我已经花费了相当多的时间来了解如何将参数从 Python 传递给 php,反之亦然。 我现在知道如何传递单个变量,但我仍然卡住,似乎无法找到这个答案:
Php 调用返回字符串列表的 Python 脚本(该部分有效)。我想在 php.ini 中处理这个列表。
当我尝试时:
print mylist
在 myscript.py 中,然后:
$result = exec('python myscript.py')
看起来 php 将 $result 理解为单个字符串(我同意这是有道理的)。
我知道也许 json 可以提供帮助,或者我需要在 python 中使用字典而不是列表。但是我无法弄清楚到底是怎么回事。
如果有人可以提供帮助,将不胜感激!谢谢!
【问题讨论】:
【参考方案1】:$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
)
【讨论】:
【参考方案2】:显然您的问题具有误导性。被重定向到这里,认为这是将 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"
)
)
【讨论】:
【参考方案3】:您正在使用标准输入/标准输出在程序之间传输数据,这意味着您必须以某种方式对您的结构进行编码,以便让您的接收程序解析元素。
最简单的方法是让 python 输出类似逗号分隔的列表
亚当、巴里、该隐
并使用
$result = explode(exec('python myscript.py'));
在 php 端将字符串数据转换回数组。
如果数据不可预测(可能包含逗号)或更结构化(不仅仅是一个简单的列表),那么您应该按照 Krab 的建议选择 json 之类的东西。
【讨论】:
好吧,这也是有道理的。您是否建议尽可能避免使用 json?它可能与安全性或处理时间有关吗?我只有在这些方面有可怕的想法...... 一点也不...如果您要做的不仅仅是一个简单的列表,而且即使您正在做一个简单的列表,您也应该使用 json 或 xml 之类的东西。通常有一些库可以使编码/解码变得相当简单。我更多的是放在简单的列表中来演示通过流(file/stdin/http)在程序之间传递“数组”的原理 知道了!感谢您教育新手 :)【参考方案4】:例如:
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'];
【讨论】:
感谢您的快速回答!我可以看到我做错了什么:当我实际上试图传递一个 numpy 数组时,我以为我正在传递一个列表。作为记录,这不适用于json!再次感谢!以上是关于将 Python 列表传递给 php的主要内容,如果未能解决你的问题,请参考以下文章