代码之家  ›  专栏  ›  技术社区  ›  Zach Smith

如何以键和值为目标来替换数组中的字符

  •  -1
  • Zach Smith  · 技术社区  · 6 年前

    我正试图以关联数组中的键和值为目标来删除双引号字符串。我通过json.stringify将一个字符串传递给一个php控制器,如下所示:

    "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 回复  |  直到 6 年前
        1
  •  1
  •   Don't Panic    6 年前

    如果 $string 是json,最简单的方法是使用 json_decode .

    $result = json_decode($string, true);
    

    如果 $字符串 是一个JSON片段,如您在问题中所示,最简单的事情仍然可能是 JSONE译码 . 你只需要添加括号就可以在解码之前完成它。

    $data = json_decode('{'.$string.'}', true);
    
        2
  •  0
  •   Nigel Ren    6 年前

    如果你不想沿着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
    )