Jak ze stringa zrobić tablice klucz = wartość ?

Jak ze stringa zrobić tablice klucz = wartość ?
masterc
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 425
0
Kopiuj
sender=user8992;session=7wdd49ea5eb118a5215c8c251d2c2a60;algorithm=SHA;content=text

jak zamienić taki string na tablicę

Kopiuj
[
  "sender" => "user8992"
  "session" => "7wdd49ea5eb118a5215c8c251d2c2a60"
  "algorithm" => "SHA"
  "content" => "text"
]
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
6

Jeśli klucze się nie powtarzają.

Kopiuj
<?php
$x = "sender=user8992;session=7wdd49ea5eb118a5215c8c251d2c2a60;algorithm=SHA;content=text";
              
$z = explode(";",$x);
$arr = [];
foreach ($z as $row){
    $y = explode("=",$row);
    $arr[$y[0]] = $y[1];
}

print_r($arr);

//Result
/*
Array
(
    [sender] => user8992
    [session] => 7wdd49ea5eb118a5215c8c251d2c2a60
    [algorithm] => SHA
    [content] => text
)
*/
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
6

Bez pętli.

Kopiuj
$x = "sender=user8992;session=7wdd49ea5eb118a5215c8c251d2c2a60;algorithm=SHA;content=text";
preg_match_all("*([^;=]+)=([^;=]+)*", $x, $m);
$result = array_combine($m[1], $m[2]);
print_r($result);

LD
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 19
4

To może jeszcze ja. Z lekką nutką defensywną :)

Kopiuj
$string = 'sender=user8992;session=7wdd49ea5eb118a5215c8c251d2c2a60;algorithm=SHA;content=text';
$array = explode(';', $string);

$fn = function ($key, $value): ?array {
    $tmp = explode('=', $value, 2);

    if (count($tmp) !== 2) {
        return null;
    }

    return [$tmp[0], $tmp[1]];
};
$data = array_column(array_map($fn, array_keys($array), $array), 1, 0);
old_man
  • Rejestracja: dni
  • Ostatnio: dni
RO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Białystok
  • Postów: 2
0

@old_man: ale można tak: parse_str(str_replace(';', '&', $text), $result);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.