将Python列表传递给php

问题描述 投票:7回答:4

我对php非常陌生,而且我已经花了很多时间来理解如何将参数从Python传递到php,反之亦然。我现在知道如何传递单个变量,但我仍然卡住了,似乎无法找到这个答案:

Php调用Python脚本(该部分有效),返回字符串列表。我想在php中处理这个列表。

当我尝试:

print mylist

在myscript.py中,然后:

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

看起来像php将$ result理解为单个字符串(我同意这是有道理的)。

我知道也许json可以帮助或者我在某种程度上需要使用字典而不是python中的列表。但是我无法弄清楚到底是怎么回事。

如果有人可以提供帮助,我们将不胜感激!谢谢!

php python parameter-passing
4个回答
12
投票

例如:

没有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'];

2
投票

您正在使用stdin / stdout在程序之间传输数据,这意味着您必须以某种方式对结构进行编码,以便让接收程序解析元素。

最简单的方法是让python输出类似于逗号分隔列表

亚当,巴里,该隐

并使用

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

在PHP端将您的字符串数据转换回数组。

如果数据是不可预测的(可能包含逗号)或更多结构化(不仅仅是一个简单的列表),那么你应该按照Krab的建议去寻找像json这样的东西。


1
投票

显然你的问题是误导性的。被重定向到这里认为这是一个将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"
    )

)

0
投票
$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
)
© www.soinside.com 2019 - 2024. All rights reserved.