1

我继承了一个 MySQL 数据库,其中表中的一个字段返回一个曾经是 Python 列表的字符串,所以我得到如下内容:

$test = "[u'Person 1', u'Person 2']";

什么是最干净/最简单/最好/最简单(我不知道如何表达)将这些数据返回到 PHP 中的数组?我正在使用 PHP4,但如有必要,我可以升级到 PHP5.4。

我没有太多的 PHP 编程经验,我的第一个想法是做这样的事情:

$new = explode(",",$test);

这种工作,但之后需要清理(例如,数组的每个元素前面至少有 u' )并且如果任何元素包含逗号,显然很脆弱。

有没有更清洁/更容易/更好/更简单的方法?

4

2 回答 2

4

最好的办法是编写一个 Python 脚本,用 JSON 更新 mysql 数据存储,几乎所有语言都可以轻松解析它。(正如@Hugo Dozois 指出的)

就个人而言,我不会尝试在 PHP 中阅读此内容。您展示的示例在一个平面列表中有 2 个 unicode 字符串......但随着时间的推移,您可能会遇到更多问题和边缘情况。你可能有一些 unicode 字符串、其他字节字符串、一些数字……甚至可能是嵌套列表或字典。

如果你没有继承它,并且 100% 确定发生了什么——那么当然,你可以解析东西。但是编写和运行将其转换为 JSON 并解决所有问题的 Python 脚本应该花费不到 5 分钟的时间。

于 2013-02-19T18:18:47.973 回答
2

您可以使用preg_match_all并执行以下操作:

$test = "[u'Person 1', u'Person 2']";

preg_match_all('/u\'(.*?)\'/', $test, $matches);

var_dump($matches);

/*
array(2) { 
[0]=> array(2) { 
    [0]=> string(11) "u'Person 1'" 
    [1]=> string(11) "u'Person 2'" } 
[1]=> array(2) { 
    [0]=> string(8) "Person 1" 
    [1]=> string(8) "Person 2" 
    } 
} 
*/
于 2013-02-19T18:16:05.117 回答