如何将此字符串转换为数组

时间:2010-03-07 05:48:10

标签: php

我有一个从我的数据库返回的字符串,我想用作数组。它已经是一个assoc数组形式。以下是目前为止的样本。我该怎么做?

'test1' => 'value 1',
'test1' => 'value 1a,
'test2' => 'value 2'

好的,这是数据库代码:

 SELECT
 inventory.invId,
 GROUP_CONCAT(CONCAT( '''', inventory.vehicle, ''' => ', '''', inventory.color, '''' )) AS vehicle,
 vehicle.vehicle_id
 FROM
 inventory
 Inner Join vehicle ON vehicle.invId = inventory.invId

这是数据库结果中的print_r

Array
(
    [0] => Array
        (
            [system] => AR3
            [vehicle] => 'geo' => 'red', 'honda' => 'blue', 'ford' => 'black'
            [vehicle_id] => 1232132
        )
)

2 个答案:

答案 0 :(得分:2)

我强烈建议不要以这种格式返回数据。首先,您需要更加小心地创建这种特殊格式以使其可解析。如果值包含字符“'”怎么办?你得到'key' => 'value '',它会抛出一个循环的整个解析过程。其次,它是一个非平凡的解析形式,需要词法分析器或使用PHP标记器,这比它的价值要多得多。

对于在字符串中传输本机结构,有一个特殊的serialized format。你只是在这里重新发明轮子。很糟糕,我可能会补充一下。 :)

只需将结果恢复为正常SELECT * FROM table …并在PHP中构建数组,这是经过验证且最快速的方法。

答案 1 :(得分:1)

$f  = array();
$a1 = explode( ',', $string );
foreach( $a1 as $s ) {
  $a2 = explode( '=>', $s ) {
    $a2[0] = preg_replace( "/^'/", '', $a2[0] );
    $a2[0] = preg_replace( "/'\s*$/", '', $a2[0] );
    $a2[1] = preg_replace( "/^\s*'/", '', $a2[1] );
    $a2[1] = preg_replace( "/'$/", '', $a2[1] );
    $f[$a2[0]] = $a2[1];
  }
}

注意:感谢您添加代码块格式化codaddict! ... Ps同意如何更好地返回结果的答案:这只是对Q

的字面答案