1

テーブル内のフィールドの 1 つが以前は Python リストだった文字列を返す MySQL データベースを継承したので、次のような結果が得られます。

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

このデータをPHPの配列に戻すための最もクリーン/最も簡単/最良/最も簡単な方法は何ですか? PHP4 を使用していますが、必要に応じて PHP5.4 にアップグレードできます。

私はPHPでプログラミングした経験があまりないので、最初に考えたのは次のようなことでした:

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

この種の機能は動作しますが、後でクリーンアップする必要があり (たとえば、配列の各要素の前に少なくとも u' がある)、要素のいずれかにコンマが含まれていると明らかに壊れやすくなります。

これを行うためのよりクリーン/簡単/より良い/簡単な方法はありますか?

4

2 に答える 2

4

最善の策は、MySQL データストアを JSON で更新する Python スクリプトを作成することです。JSON は、ほぼすべての言語で簡単に解析できます。(@Hugo Dozoisが指摘したように)

個人的には、これを PHP で読み込もうとはしません。あなたが示した例には、フラットリストに2つのユニコード文字列があります...しかし、時間が経つにつれて、より多くの問題やエッジケースに遭遇する可能性があります. いくつかのユニコード文字列、他のバイト文字列、いくつかの数字...おそらくネストされたリストや辞書さえあるかもしれません。

それを継承せず、何が起こっているのか 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 に答える