Php string na tablice


(Sitemaster) #1

Mam se stringa wyglądającego tak:

Jak teraz wyciągnąć z niego wartość dla zmienna2?

Chciał bym mieć to w formie tablicy by moc sie odwoływać np $tablica['zmienna2']

Jak to zrobić????

Podpowiem, że w takiej formie zapisuje dane skrypt ale musze się do tego dostać z poziomu innego gdzie już nie mam obsługi sesji przez tego handlera.

Zastanawiamnie że przypomina to troche serializowaną tablice

a:3:{s:8:"zmienna1";s:5:"test1";s:8:"zmienna2";s:5:"test2";s:8:"zmienna3";s:5:"test3";}

ale unserialize nic tunie daje.

Pomocy!


(mrbungle) #2

tak zacząłem sobie "rozkminiać" jak PHP zapisuje dane z sesji przy zapisie plikow tymczasowych sess_XXXXXXXXXXXXXXXXXXXX..... i zgadzam sie - wyglada to na dane serializowane.

Abstrachując od Twojego zapisu ja bym to zrobił tak:

<?php


$string = 'user|s:5:"admin";id|s:32:"0dc937c4f00e7121c370e20ca4550fb5";';


$_COOKIE['SESSION'] = array();


//1. podział na poszczegolne zmienne

$data = explode(';', $string);


// dla kazdej zmiennej wyciagnij dane

foreach($data as $value)

{

	if(!empty($value))

	{

		$first = explode('|', $value);

		$second = explode(':', $first[1], 3);


		switch($second[0])

		{

			case 's':

				$type = 'string';

				break;


			case 'i':

				$type = 'integer';

				break;


			// ... itd

		}


		// wyciecie "srodka"

		$second[2] = substr($second[2], 1, strlen($second[2])-2);

		// ustalenie typu zmiennej - w sumie w PHP chyba niepotrzebne

		settype($second[2], $type);


		$_COOKIE['SESSION'][$first[0]] = $second[2];

	}

}



echo '

';

print_r($_COOKIE['SESSION']);

echo '

'; ?> [/code] efekt koncowy dla tych danych:
[code] Array ( [user] => admin [id] => 0dc937c4f00e7121c370e20ca4550fb5 )

tak jest ok?


(Sitemaster) #3

Stary, życie mi uratowałeś !!


(mrbungle) #4

już nie przesadzajmy :wink:

ale ciesze sie że Ci pomogłem :wink:


(L337 Crew) #5

w sumie jest to rozbicie na tablice, a separatorem jest tutaj | :wink:

Analogiczny przykład:

http://www.programuj.com/artykuly/www/plikiphp.php


(Sitemaster) #6

Nie jdeno rozbicie bo kilka razy explode trzeba użyć, szkoda że nie ma prostszego sposobu.

Okroiłem tylko nieco i jest spoko.