繁体   English   中英

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

[英]How to convert this string into an array

我有一个要从数据库中返回的字符串,我想将其用作数组。 它已经是一个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
        )
)

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

为了以字符串形式传输本机结构,有一种特殊的序列化格式 您只是在这里重新发明轮子。 糟糕的是,我可能会补充。 :)

只需将结果返回为普通的SELECT * FROM table …并在PHP中构建数组,这就是行之有效的最快方法。

$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];
  }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM