Как настроить таргетинг на ключ и значение для замены символов в массиве - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь нацелить ключи и значения в ассоциативном массиве, чтобы удалить двойные кавычки.Я передаю в php-контроллер строку через JSON.stringify следующим образом:

"searchFilterType":"inside","searchFilterField":"okay","searchFilterGeoDistance":"27","searchFilterZip":"2","keyword":"test"

Я назначаю это переменной $string;

Я использую следующее, чтобы разбить ее намассив:

$sExplode = explode(',', $string);
$searchFilters = [];

Что дает мне

[0] => "searchFilterType":"inside"
[1] => "searchFilterField":"okay"
[2] => "searchFilterGeoDistance":"25"
[3] => "searchFilterZip":""
[4] => "keyword":"test"

Затем я разбиваю это на ассоциативный массив, используя это:

foreach ($sExplode as $v) {
        $v = explode(":",$v);
        $searchFilters[$v[0]] = $v[1];
}

Что дает мне:

["searchFilterType"] => "inside"
["searchFilterField"] => "okay"
["searchFilterGeoDistance"] => "27"
["searchFilterZip"] => "2"
["keyword"] => "test"

Затем я удаляю строки из значений, используя это:

$searchFilters = preg_replace("/[^a-zA-Z 0-9]+/", "", $searchFilters);

Давая мне:

["searchFilterType"] => inside
["searchFilterField"] => okay
["searchFilterGeoDistance"] => 27
["searchFilterZip"] => 2
["keyword"] => test

Но мне все еще нужно удалить строку в ключах массива,Моя главная цель, к которой я стремлюсь, - это конечный результат:

[searchFilterType] => inside
[searchFilterField] => okay
[searchFilterGeoDistance] => 27
[searchFilterZip] => 2
[keyword] => test

Есть ли более простое решение, чем эти несколько шагов?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Если $string - это JSON, самое простое, что нужно сделать, это использовать json_decode.

$result = json_decode($string, true);

Если $string - это фрагмент JSON, как вы показали в вопросе, самая простая вещьсделать еще наверное json_decode.Вам просто нужно добавить скобки, чтобы завершить его, прежде чем он может быть декодирован.

$data = json_decode('{'.$string.'}', true);
0 голосов
/ 25 сентября 2018

Если вы не хотите идти по маршруту JSON, это просто делает explode() таким же образом, а затем проходит через массив результатов и обрабатывает его, как если бы это была строка с разделителями (используя str_getcsv()) с: в качестве разделителя и возможность удаления кавычек.

Наконец, используйте array_column(), чтобы объединить ключ и значение в ассоциативный массив ...

$string = '"searchFilterType":"inside","searchFilterField":"okay","searchFilterGeoDistance":"27","searchFilterZip":"2","keyword":"test"';
$sExplode = explode(',', $string);
$map = array_map(function ( $value ) { return str_getcsv($value, ":", '"'); }, $sExplode);

$out = array_column($map, 1, 0);
print_r($out);

..

Array
(
    [searchFilterType] => inside
    [searchFilterField] => okay
    [searchFilterGeoDistance] => 27
    [searchFilterZip] => 2
    [keyword] => test
)
...