我的服务器上运行一个 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 一点也不熟悉),我想做的是改编 here 中的代码它将 CSV 文件下载给用户,但使用 mySQL 来填充它。这里的设置部分工作正常。
针对下面 jack 的回答进行了编辑
// 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);
//}
最佳答案
不确定这对您是否可行,但从 PHP 5.4 开始它支持 short array syntax ,例如[1, 2, 3]
而不是 array(1, 2, 3)
。
所以,你可以使用邪恶...我的意思是eval()
:
$vars = eval(`python weatherdata.py $stationID $startdate $enddate`);
否则,如果数组语法始终采用该格式,只需使用 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
)
关于php - 在 PHP 中解析 Python 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879566/