2011-07-23 14 views
3

いつか私はいくつかのAPIを介してデータをたくさん取得していました。単純なvar_dumpまたはprint_rを使ってフラットファイルに保存しました。今、私はデータを処理するために探していますし、各ラインは次のようになります。文字列を配列に変換するPHP

「 'middle_initial' => ''、 'SID' => '1419843'、 '固定' => 'Y'、 「cart_weight => '0'、 'key' => 'ABCD'、 '状態' => 'XX'、 'last_name' => 'MNOP'、 'email' => '[email protected]'、 'city '=> 'ロンドン'、 'にstreet_address'=> 'サンプル'、 'first_nameの'=> 'Sparsh'、」

今、私は戻って配列形式にこのデータを取得する必要があります。私はそれができる方法はありますか?

+0

これが一度だけの場合は、コピーしてファイルに貼り付け、PHPで解析できるようにします。それ以外の場合は 'eval()'と考えるかもしれませんが、非常に注意してください。 – Brad

+0

もしあなたが再びapiからデータを取り出せれば明らかな解決策は、配列を 'serialize()'する保存プロセスを変更することです。ファイルのテキストを取得して 'unserialize($ text)'しなければなりません。 – prodigitalson

答えて

6

何最初のセパレータとして', 'を使用して、explode()機能で文字列を爆発について:その後、

array 
    0 => string ''middle_initial' => ''' (length=22) 
    1 => string ''sid' => '1419843'' (length=18) 
    2 => string ''fixed' => 'Y'' (length=14) 
    3 => string ''cart_weight' => '0'' (length=20) 
    ... 


そして:

$str = "'middle_initial' => '', 'sid' => '1419843', 'fixed' => 'Y', 'cart_weight' => '0', 'key' => 'ABCD', 'state' => 'XX', 'last_name' => 'MNOP', 'email' => '[email protected]', 'city' => 'London', 'street_address' => 'Sample', 'first_name' => 'Sparsh',"; 
$items = explode(', ', $str); 
var_dump($items); 

あなたの配列になるだろう。このように見えますそのリストを反復して、=>の各辺の各項目を一致させ、結果のデータのキーとして=>の最初の辺を使用して、値として第2:あなたを得るでしょう

$result = array(); 
foreach ($items as $item) { 
    if (preg_match("/'(.*?)' => '(.*?)'/", $item, $matches)) { 
     $result[ $matches[1] ] = $matches[2]; 
    } 
} 
var_dump($result); 


しかし、真剣に、あなたは、このようなひどい形式でデータを保存しないでください。print_r()は、データを表示するためになされたものであり、デバッグ目的のために - それを保存せずに、後で再ロードしてください!

テキストファイルにデータを保存する場合

は、両者がそれぞれ unserialize()または json_decode()を、使用して復元することができ serialize()または json_encode()、使用しています。

+3

私はちょうど実現しています:この答えは私の3,000 stackoverflow ;-) –

0

var_dumpの代わりにSerializeUnserializeを使用する方が、はるかに簡単です。

という形で

、多分あなたは

explode(' => ', $string) 

を試してみて、その配列を通過し、新しい配列で一緒にペアを置くことができます。

-1

print_rの出力と配列であれば、私の少しのprint_r converterを使用することができます。PHPソースコードはこのリンクで利用できます。

トークナイザは正規表現に基づいているため、必要に応じて使用できます。パーサは、PHP配列の値の作成を扱います。

あなたのプロフィールページにリンクされている最新のバージョンが見つかります。

+0

@Downvoter:あなたの考えを共有してください。 – hakre

1

私は心からPascal Martinに同意しますが、このような種類のデータを扱う場合は、実際の内容に応じて次のようなことができます(パスカルの最初の示唆)。しかし、自分自身を好きにして、データをPHP配列(シリアル化、JSON、CSVなど)に確実に戻すことができる形式で保存します。

<pre> 
<?php 

$str = "\" 'middle_initial' => '', 'sid' => '1419843', 'fixed' => 'Y', 'cart_weight' => '0', 'key' => 'ABCD', 'state' => 'XX', 'last_name' => 'MNOP', 'email' => '[email protected]', 'city' => 'London', 'street_address' => 'Sample', 'first_name' => 'Sparsh',\""; 

function myStringToArray($str) { 
    $str = substr($str, 1, strlen(substr($str, 0, strlen($str)-2))); 
    $str = str_replace("'",'',$str); 
    $strs = explode(',', $str); 
    $arr = array(); 
    $c_strs = count($strs); 
    for ($i = 0; $i < $c_strs; $i++) { 
     if (strpos($strs[$i],'=>') !== false) { 
      $_arr = explode('=>',$strs[$i]); 
      $arr[trim($_arr[0])] = trim($_arr[1]); 
     } 
    } 
    return $arr; 
} 

print_r(myStringToArray($str)); 

?> 
</pre> 

http://jfcoder.com/test/substr.php

注、あなたが(例えば、', 'トークンに関するパスカルの提案を使用して)ご使用のアレイメンバーのコンテンツ内のカンマのを持っている場合は機能を調整する必要があります。

関連する問題