将字符串转换为数组PHP

Spa*_*pta 3 php arrays string php-5.3

不久之后我通过一些API获取了大量数据,并将其保存到一个简单的var_dump或print_r的平面文件中.现在我想处理数据,每一行看起来像:

"'middle_initial'=>'','sid'=>'1419843','固定'=>'Y','cart_weight'=>'0','key'=>'ABCD','州'=> 'XX','last_name'=>'MNOP','email'=>'abc @ example.com','city'=>'伦敦','street_address'=>'Sample','first_name'=>' Sparsh","

现在我需要将这些数据恢复为数组格式.有没有办法可以做到这一点?

Pas*_*TIN 6

首先explode()使用函数爆炸字符串,使用', '作为分隔符:

$str = "'middle_initial' => '', 'sid' => '1419843', 'fixed' => 'Y', 'cart_weight' => '0', 'key' => 'ABCD', 'state' => 'XX', 'last_name' => 'MNOP', 'email' => 'abc@example.com', 'city' => 'London', 'street_address' => 'Sample', 'first_name' => 'Sparsh',";
$items = explode(', ', $str);
var_dump($items);
Run Code Online (Sandbox Code Playgroud)

哪个会让你看起来像这样的数组:

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)
  ...
Run Code Online (Sandbox Code Playgroud)


然后,迭代该列表,匹配每一项的每一项=>,并使用第一侧=>作为结果数据的键,第二项作为值:

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

哪能得到你:

array
  'middle_initial' => string '' (length=0)
  'sid' => string '1419843' (length=7)
  'fixed' => string 'Y' (length=1)
  'cart_weight' => string '0' (length=1)
  ...
Run Code Online (Sandbox Code Playgroud)


但是,严肃地说,你不应该以如此糟糕的格式存储数据:print_r()用于显示数据,用于调试目的 - 不存储它以后再重新加载它!

如果您想将数据存储到一个文本文件,使用serialize()或者json_encode(),它可以同时使用恢复unserialize()json_decode()分别.

  • 我只是意识到:这个答案是我在stackoverflow上的第3,000个;-) (3认同)