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