Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python列表传递给php_Php_Python_Parameter Passing - Fatal编程技术网

将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可能会

我对php非常陌生,我花了不少时间来理解如何将参数从Python传递到php,反之亦然。 我现在知道如何传递单个变量,但我仍然被卡住了,似乎找不到这个问题的答案:

Php调用一个Python脚本(该部分工作),该脚本返回字符串列表。我想用php处理这个列表

当我尝试时:

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)在程序之间传递“数组”的原理,明白了!感谢您对新手的教育:)