Bir diziye bu dizeyi dönüştürmek için nasıl

2 Cevap

Ben bir dizi olarak kullanmak istiyorum benim veritabanından iade edilen bir dize var. Bu bir ilişkisel dizi şeklinde zaten. İşte bu kadar benzediğini bir örnek. Bunu nasıl yaparım?

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

Tamam, bu veritabanı kodu:

 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

Bu veritabanı sonuçları print_r olduğunu

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

2 Cevap

Ben böylesi bir formatta veri dönen karşı tavsiye ediyorum. Her şeyden önce, bunu ayrıştırmak-mümkün yapmak için bu özel biçimi oluşturarak daha fazla dikkat çekmek gerekir. Bir değer karakteri "'" içeriyorsa ne olur? Sen bir döngü için tüm ayrıştırma süreci atmak, hangi 'key' => 'value '' olsun istiyorum. İkincisi, ayrıştırmak ve bir lexer veya bu değer çok daha eseridir PHP dizgeciklerini kullanarak gerektirecek önemsiz olmayan bir formudur.

Dizeleri yerli yapıların taşınması için, özel bir serialized format var. Sadece burada tekerleği yeniden icat ediyoruz. Kötü, ben ekleyebilirsiniz. :)

Sadece SELECT * FROM table …, normal olarak sonuç ve PHP dizi oluşturmak, bunu yapmak için kanıtlanmış ve en hızlı yoludur.

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

Not: Teşekkür kod bloğu biçimlendirme codaddict eklemek için! Ps ... Sonuç, daha iyi dönmek için nasıl cevap katılıyorum: Bu Q sadece bir hazır cevap