LINUX.ORG.RU

Prerl. Помогите разобрать строку.

 , , ,


0

2

Всем доброго времени суток!

Есть строка: «param1=value&param2=value&param3=value&param1=value&param1=value»

Нужно, чтобы все значенеия param1 (их много) были занесены в массив - [value, value, ..., value], а из остальных параметров и их значений сформировать хеш вида { «param2»=>value, «param3»: value};

Как собственно такое провернуть?


HTTP::Body как один из вариантов. Однако, толи из php, толи ещё откуда (js?) практикуется ересь вида param1[0], param1[1], param1[n], каждое из которых является строкой, ключом к хэшу ℅params. Как один из вариантов как это применять видел eval (яп не суть важно).

gh0stwizard ★★★★★ ()

Очень унылый тред.

Ну чо, если перл-хакерская культура сдохла, в дело вступает JS.

value = 1

s = "param1=value&param2=value&param3=value&param1=value&param1=value"

console.log(
 s.replace(/param[^1]=[^&]*&/g, "").replace(/param1=/g, "").split("&").map(function(x){return eval(x)}),
 eval("({" +s.replace(/param1=[^&]*&?/g, ""). replace(/=/g, ": ").replace(/&/g, ", ") + "})")
)

sadlinuxoid ()
map {
    my %r;
    for (map [split/=/], split'&') { push @{$r{$_->[0]}//=[]}, $_->[1] }
    map { $_ => @{$r{$_}} > 1 ? $r{$_} : $r{$_}[0] } keys%r;
} 'param1=value&param2=value&param3=value&param1=value&param1=value';
vividsnow ()
use Data::Dumper;

$t = 'param1=value1&param2=value2&param3=value3&param1=value11&param1=value111';

@t = split /&|=/, $t;

for (0..$#t) {
    next unless $t[$_];
    push @{ $final{ $t[$_] } }, $t[$_+1];
    delete $t[$_,$_+1];
}

print Dumper \%final;
Deleted ()
Ответ на: комментарий от sadlinuxoid

в голову пришло:

$s = 'param1=value1&param2=value2&param3=value3&param1=value11&param1=value111';

@a = split /&|=/, $s;

$_ % 2 && push @{ $h{$a[ $_-1 ]} }, $a[$_] while each @a;

все данные сохранены в хэше (%h).

Deleted ()

А в чем, собственно, проблема?

level1 ()
for (0..$#t) {
...
delete $t[$_,$_+1];
...
while each @a;

Млять, куда я попал?

level1 ()
Ответ на: комментарий от level1

Млять, куда я попал?

на родину, сынок.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.