Manipulate a url string by adding GET parameters

前端 未结 15 2148
旧巷少年郎
旧巷少年郎 2020-11-29 00:50

I want to add GET parameters to URLs that may and may not contain GET parameters without repeating ? or &.

Example:

If I want t

15条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-29 00:58

     /**
     * @example addParamToUrl('/path/to/?find=1', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     * @example addParamToUrl('//example.com/path/to/?find=1', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     * @example addParamToUrl('https://example.com/path/to/?find=1&FILTER=Y', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     *
     * @param       $url string url
     * @param array $addParams
     *
     * @return string
     */
    function addParamToUrl($url, array $addParams) {
      if (!is_array($addParams)) {
        return $url;
      }
    
      $info = parse_url($url);
    
      $query = array();
    
      if ($info['query']) {
        parse_str($info['query'], $query);
      }
    
      if (!is_array($query)) {
        $query = array();
      }
    
      $params = array_merge($query, $addParams);
    
      $result = '';
    
      if ($info['scheme']) {
        $result .= $info['scheme'] . ':';
      }
    
      if ($info['host']) {
        $result .= '//' . $info['host'];
      }
    
      if ($info['path']) {
        $result .= $info['path'];
      }
    
      if ($params) {
        $result .= '?' . http_build_query($params);
      }
    
      return $result;
    }
    

提交回复
热议问题