Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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
用PHP解析Python数组_Php_Arrays_Python 2.7 - Fatal编程技术网

用PHP解析Python数组

用PHP解析Python数组,php,arrays,python-2.7,Php,Arrays,Python 2.7,我的服务器上运行了一个Python脚本,它创建了一个2D列表,如下所示: [['Header1', 'Header2', 'Header3'], ['2012-09-10 00:11:00', '61.3', '57.0'], ...] 我将其传递回运行我的网页的PHP脚本。下面是我当前用于获取数组的PHP。我得到了行,但显然在开始时有一个不需要的[[,在结束时有一个] exec("python weatherdata.py $stationID $startdate $enddate", $

我的服务器上运行了一个Python脚本,它创建了一个2D列表,如下所示:

[['Header1', 'Header2', 'Header3'], ['2012-09-10 00:11:00', '61.3', '57.0'], ...]
我将其传递回运行我的网页的PHP脚本。下面是我当前用于获取数组的PHP。我得到了行,但显然在开始时有一个不需要的
[[
,在结束时有一个
]

exec("python weatherdata.py $stationID $startdate $enddate", $pyoutput);
$vars = explode("], [", $pyoutput[0]);
为了解释我实际上想要做什么,因为肯定会有一个“合适的”解决方案(我对PHP一点也不熟悉),所以我想做的是修改代码,从中下载CSV文件给用户,但使用mySQL填充它。这里的设置部分工作正常

根据以下杰克的回答进行编辑

// Commented out my working parsing part
// remove the start and end square braces then split into rows
//$output = str_replace("[[","",$pyoutput);
//$output = str_replace("]]","",$output);
//$rows = explode("], [", $output[0]);

// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='data.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

foreach (preg_split('/],\s*\[/', trim($pyoutput, '[]')) as $row) {
        $data= preg_split("/',\s*'/", trim($row, "'"));
        fputcsv($data);
}
// Commented out my working write to CSV part
// write rows
//foreach ($rows as $row){
//    $row = str_replace("'","",$row);
//    $row = explode(",", $row);
//    fputcsv($output, $row);
//}

不确定这对您是否可行,但由于PHP5.4,它支持,例如
[1,2,3]
而不是
数组(1,2,3)

所以,你可以用邪恶。。。我的意思是
eval()

否则,如果数组语法始终采用该格式,只需使用
preg_split()
将其分开,首先在方括号内,然后在单引号内:

foreach (preg_split('/],\s*\[/', trim($s, '[]')) as $row) {
        $data = preg_split("/',\s*'/", trim($row, "'"));
        print_r($data);
}
输出:

Array
(
    [0] => Header1
    [1] => Header2
    [2] => Header3
)
Array
(
    [0] => 2012-09-10 00:11:00
    [1] => 61.3
    [2] => 57.0
)

不确定这对您是否可行,但由于PHP5.4,它支持,例如
[1,2,3]
而不是
数组(1,2,3)

所以,你可以用邪恶。。。我的意思是
eval()

否则,如果数组语法始终采用该格式,只需使用
preg_split()
将其分开,首先在方括号内,然后在单引号内:

foreach (preg_split('/],\s*\[/', trim($s, '[]')) as $row) {
        $data = preg_split("/',\s*'/", trim($row, "'"));
        print_r($data);
}
输出:

Array
(
    [0] => Header1
    [1] => Header2
    [2] => Header3
)
Array
(
    [0] => 2012-09-10 00:11:00
    [1] => 61.3
    [2] => 57.0
)


如果您可以让Python用双引号而不是单引号输出数组,那么您只需
json\u decode()
it而无需修改。尝试使用一个可互操作的标准,JSON似乎非常适合,这似乎是正确的选择。我会看看是否有可能-虽然它也可以作为一个字符串替换在PHP结束?我会回答我自己-是的,它可以<代码> $输出= StryRead(‘’’,‘’,$输出”;< /Cord>这不是一个安全的选项。考虑<代码> [一些字符串,其中有一个“引号”]。-数据将被修改。Python没有json编码功能吗?如果您可以让Python用双引号而不是单引号输出数组,那么您只需
json\u decode()
无需修改即可使用。尝试使用一个可互操作的标准,JSON似乎非常适合。这似乎是正确的选择。我会看看是否有可能——尽管它也可以作为PHP端的字符串替换吗?我会自己回答——是的,它可以
$output=str_replace(“,”,$output))这不是一个安全的选项。考虑<代码> [ [某个字符串中有“引号”] < /代码> -数据将被修改。Python没有json编码函数吗?谢谢,但这给了我一个内部服务器错误,我想是因为不是正确的PHP版本。@jamiebull更新了它,假设字符串是“简单的”:)谢谢。不过我现在已经破解了。我本来会使用@Dave Random的json方法,但事实证明,我的主机并没有将json作为预装包的一部分,这需要花费数小时毫无意义的周旋才能弄清楚。最后,我使用了remove“[[”,remove“]]”,explode on“]”,[”,对于每一行,写下每一行,然后进行解析。虽然有点粗糙,但它仍然有效。@JamieBull这不是我回答的第二部分吗?:)很可能是。正如我所说的,PHP对我来说是新的(就像昨天新的一样)。我实际上错过了你答案的第二部分。我只是快速尝试了一下按照你的方式实现它,我确信问题就在我这边。我是否应该将我的
$output
作为代码片段中的
$s
变量传递,然后使用
fputcsv($data)写入CSV;
bea因为输出的是一个空白的CSV?谢谢,但这给了我一个内部服务器错误,我想是因为不是正确的PHP版本。@jamiebull更新了它,假设字符串是“简单的”:)谢谢。不过我现在已经破解了。我本来会使用@Dave Random的json方法,但事实证明,我的主机没有将json作为预装包的一部分—这需要花费数小时毫无意义的周旋才能弄清楚。最后我使用了删除“[[”,删除“]]”,在“],[”上爆炸,对于每一行,写下每一行,边写边解析。尽可能的粗糙,但它正在工作。@JamieBull这基本上不是我回答的第二部分吗?:)很可能是。正如我所说,PHP对我来说是新的(比如,昨天新的)。我实际上错过了你答案的第二部分。我只是快速尝试了一下按照你的方式实现它,我确信问题就在我这边。我是否应该将我的
$output
作为代码片段中的
$s
变量传递给CSV,然后用
fputcsv($data);
因为它输出的是一个空白的CSV?