Patlamaya olmadan diziye String

3 Cevap php

Ben veri döndürdü başka bir sunucudan veri almak için bir API kullanıyorum böyle bir şey olur:

accountid=10110 type=prem servertime=1263752255 validuntil=1266163393 
username= curfiles=11 curspace=188374868 bodkb=5000000 premkbleft=24875313

Bu ben bütün dize dışında, ben şu anda tüm değerler otomatik olarak diziye dönüştürmek olduğu başka bir yol ya da fonksiyon sadece daha fazla bilgi edinmek ve benim kodlama geliştirmek için orada almak için preg_match kullanıyorum, ancak iki gerekir değerler bir bütün dize?

Teşekkür ederiz.

3 Cevap

Patlamak kullanarak ne olursa olsun, bunun için hızlı.

Ancak, size soruyu cevaplamak için, bu birçok şekilde yapabilirsiniz. Ama yapabilirsiniz, çünkü gerektiği anlamına gelmez. Eğer gerçekten garip yapmak istiyorum ama eğer, bu deneyin.

UPdated using strpos

$arr = array();
$begin = 0;
$str = trim($str); # remove leading and trailing whitespace
while ($end = strpos($str, ' ', $begin)) {
    $split = strpos($str, '=', $begin);
    if ($split > $end) break;
    $arr[substr($str, $begin, $split-$begin)] = substr($str, $split+1, $end-$split-1);
    $begin = $end+1;
}

Sooo benim daha hızlı-daha-preg_split, strpos-temelli fonksiyon bu gibi görünüyor:

function unpack_server_data($serverData)
{
    $output = array();
    $keyStart = 0;
    $keepParsing = true;

    do
    {
        $keyEnd = strpos($serverData, '=', $keyStart);
        $valueStart = $keyEnd + 1;
        $valueEnd = strpos($serverData, ' ', $valueStart);
        if($valueEnd === false)
        {
            $valueEnd = strlen($serverData);
            $keepParsing = false;
        }

        $key = substr($serverData, $keyStart, $keyEnd - $keyStart);
        $value = substr($serverData, $valueStart, $valueEnd - $valueStart);
        $output[$key] = $value;

        $keyStart = $valueEnd + 1;
    }
    while($keepParsing);

    return $output;
}

Bir eşittir karakteri arar, sonra bir boşluk karakteri arar ve bir anahtar adı başladığı yere karar vermek için bu ikisini kullanır ve bir değer adı başladığında.

str_replace(' ', '&', $string); önce parse_str belki yapmanız gereken denemek