Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何创建包含数组的以下字符串?_Php_Url - Fatal编程技术网

Php 如何创建包含数组的以下字符串?

Php 如何创建包含数组的以下字符串?,php,url,Php,Url,我有一个$\u的数组 Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 ) 我正在使用此while循环为其创建字符串: while (list($key, $value) = each($_GET)) { $get_url .= $key

我有一个$\u的数组

Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
        )
我正在使用此while循环为其创建字符串:

while (list($key, $value) = each($_GET)) {

          $get_url .= $key . '=' . rawurlencode(stripslashes($value)) . '&';

      }
现在,如果我从$\u获得一个数组,可以这样说:

Array
(
    [0] => pid
    [1] => gid
    [2] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
        )

)
那么,在这种情况下,while循环可能会做哪些更改,以便在使用它重定向url时避免类似这样的结果。 我希望url能正确显示这些值,而不是像“2=Array”那样。。我该怎么做

编辑

谢谢大家的帮助,但我不能介绍新功能,也不能用for循环替换while循环,如果您能帮助我重新编辑给定的while循环,我将非常感激

编辑2

我使用
标题(位置:$get_url)
重定向到创建的url,这是url中显示“2=Array”的问题吗

编辑3

用于构建查询的函数,注意:这些函数是osCommerce的内置函数

我仍然通过在其中引入foreach循环对其中一个进行了更改,请参见下面的用法和函数定义:

function tep_redirect($url) {
    if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) { 
      tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
    }

    if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page
      if (substr($url, 0, strlen(HTTP_SERVER . DIR_WS_HTTP_CATALOG)) == HTTP_SERVER . DIR_WS_HTTP_CATALOG) { // NONSSL url
        $url = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG . substr($url, strlen(HTTP_SERVER . DIR_WS_HTTP_CATALOG)); // Change it to SSL
      }
    }

    $url =  str_replace("&", "&", $url);

    header('Location: ' . $url);

    tep_exit();
  }
=========================

   function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
        global $request_type, $session_started, $SID, $spider_flag;

        if (!tep_not_null($page)) {
          die('</td></tr></table></td></tr></table><br><br><font color="#ff0000">' . TEP_HREF_LINK_ERROR1);
        }

        if ($connection == 'NONSSL') {
          $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
        } elseif ($connection == 'SSL') {
          if (ENABLE_SSL == true) {
            $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG;
          } else {
            $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
          }
        } else {
          die('</td></tr></table></td></tr></table><br><br><font color="#ff0000">' . TEP_HREF_LINK_ERROR2);
        }

        if (tep_not_null($parameters)) {
          while ( (substr($parameters, -5) == '&amp;') ) $parameters = substr($parameters, 0, strlen($parameters)-5);
          $link .= $page . '?' . tep_output_string($parameters);
          $separator = '&amp;';
        } else {
          $link .= $page;
          $separator = '?';
        }


        // if session is not started or requested not to add session, skip it
        if ( ($add_session_id == true) && ($session_started == true) ){

          // if cookies are not set and not forced, then add the session info incase the set cookie fails 
          if ( ! isset($_COOKIE[tep_session_name()]) && (SESSION_FORCE_COOKIE_USE == 'False') ) {
            $_sid = tep_session_name() . '=' . tep_session_id();

          // if we are chaning modes and cookie domains differ, we need to add the session info
          } elseif ( HTTP_COOKIE_DOMAIN . HTTP_COOKIE_PATH != HTTPS_COOKIE_DOMAIN . HTTPS_COOKIE_PATH
                     &&
                     (
                       ( $request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true )
                       ||
                       ( $request_type == 'SSL' && $connection == 'NONSSL' )
                     )
                   ) {
            $_sid = tep_session_name() . '=' . tep_session_id();
          }

        }

        if (isset($_sid) && !$spider_flag) {
          $link .= $separator . tep_output_string($_sid);
        }

        return $link;
      }
function tep_get_all_get_paramtrs($exclude_array = '') {
    global $HTTP_GET_VARS;

    if (!is_array($exclude_array)) $exclude_array = array();

    $get_url = '';
    if (is_array($HTTP_GET_VARS) && (sizeof($HTTP_GET_VARS) > 0)) 
    {
      reset($HTTP_GET_VARS);
      foreach($HTTP_GET_VARS as $key => $a)
      {
        if(is_array($a))
        {
            foreach($a as $k => $v)
            {
                $get_url[] = $key . '[]' . '=' . rawurlencode(stripslashes($v));
            }
        }
        else
        {
            $get_url[] = $key . '=' . rawurlencode(stripslashes($a));
        }
      }

   /*   while (list($key, $value) = each($HTTP_GET_VARS)) 
      {
      if(!is_array($value))
      {
        if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) 
        {
          $get_url .= $key . '=' . rawurlencode(stripslashes($value));
        }
      }
      else
      {

      if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) 
        {
          $get_url .= preg_replace('/#\d/','[]',http_build_query($value,$key.'#'));
        }
     /*     while(list($key1, $value1) = each($value))
        {
            if ( (strlen($value1) > 0) && ($key1 != tep_session_name()) && ($key1 != 'error') && (!in_array($key1, $exclude_array)) && ($key1 != 'x') && ($key1 != 'y') ) 
            {
              $get_url .= $key1 . '=' . rawurlencode(stripslashes($value1));
            }
        }*/
     /* }
      }*/
      $get_url .=  '&amp;';
    }

    return $get_url;
  }
tep_redirect(tep_href_link($goto, tep_get_all_get_paramtrs($parameters)));
========================

   function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
        global $request_type, $session_started, $SID, $spider_flag;

        if (!tep_not_null($page)) {
          die('</td></tr></table></td></tr></table><br><br><font color="#ff0000">' . TEP_HREF_LINK_ERROR1);
        }

        if ($connection == 'NONSSL') {
          $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
        } elseif ($connection == 'SSL') {
          if (ENABLE_SSL == true) {
            $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG;
          } else {
            $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
          }
        } else {
          die('</td></tr></table></td></tr></table><br><br><font color="#ff0000">' . TEP_HREF_LINK_ERROR2);
        }

        if (tep_not_null($parameters)) {
          while ( (substr($parameters, -5) == '&amp;') ) $parameters = substr($parameters, 0, strlen($parameters)-5);
          $link .= $page . '?' . tep_output_string($parameters);
          $separator = '&amp;';
        } else {
          $link .= $page;
          $separator = '?';
        }


        // if session is not started or requested not to add session, skip it
        if ( ($add_session_id == true) && ($session_started == true) ){

          // if cookies are not set and not forced, then add the session info incase the set cookie fails 
          if ( ! isset($_COOKIE[tep_session_name()]) && (SESSION_FORCE_COOKIE_USE == 'False') ) {
            $_sid = tep_session_name() . '=' . tep_session_id();

          // if we are chaning modes and cookie domains differ, we need to add the session info
          } elseif ( HTTP_COOKIE_DOMAIN . HTTP_COOKIE_PATH != HTTPS_COOKIE_DOMAIN . HTTPS_COOKIE_PATH
                     &&
                     (
                       ( $request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true )
                       ||
                       ( $request_type == 'SSL' && $connection == 'NONSSL' )
                     )
                   ) {
            $_sid = tep_session_name() . '=' . tep_session_id();
          }

        }

        if (isset($_sid) && !$spider_flag) {
          $link .= $separator . tep_output_string($_sid);
        }

        return $link;
      }
function tep_get_all_get_paramtrs($exclude_array = '') {
    global $HTTP_GET_VARS;

    if (!is_array($exclude_array)) $exclude_array = array();

    $get_url = '';
    if (is_array($HTTP_GET_VARS) && (sizeof($HTTP_GET_VARS) > 0)) 
    {
      reset($HTTP_GET_VARS);
      foreach($HTTP_GET_VARS as $key => $a)
      {
        if(is_array($a))
        {
            foreach($a as $k => $v)
            {
                $get_url[] = $key . '[]' . '=' . rawurlencode(stripslashes($v));
            }
        }
        else
        {
            $get_url[] = $key . '=' . rawurlencode(stripslashes($a));
        }
      }

   /*   while (list($key, $value) = each($HTTP_GET_VARS)) 
      {
      if(!is_array($value))
      {
        if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) 
        {
          $get_url .= $key . '=' . rawurlencode(stripslashes($value));
        }
      }
      else
      {

      if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) 
        {
          $get_url .= preg_replace('/#\d/','[]',http_build_query($value,$key.'#'));
        }
     /*     while(list($key1, $value1) = each($value))
        {
            if ( (strlen($value1) > 0) && ($key1 != tep_session_name()) && ($key1 != 'error') && (!in_array($key1, $exclude_array)) && ($key1 != 'x') && ($key1 != 'y') ) 
            {
              $get_url .= $key1 . '=' . rawurlencode(stripslashes($value1));
            }
        }*/
     /* }
      }*/
      $get_url .=  '&amp;';
    }

    return $get_url;
  }
tep_redirect(tep_href_link($goto, tep_get_all_get_paramtrs($parameters)));

这里$parameters是一个具有两个值的数组,与url显示逻辑没有任何相似之处

如果您想从多维数组创建url,应该使用递归,或者只使用内置php函数,其结果与我创建的函数相同(正如Maurice Kherlakian所说)。这是最简单的方法

递归函数示例:

function URLfromArray($array,$url = "")
{

    foreach($array as $key => $val)
    {
        if(is_array($val))
        {
            $url = URLfromArray($val,$url);
        }
        else
        {
            $url .= $key."=".$val."&";
        }
    }

    return $url;
}

如果需要不同的键,如2_0、2_1,则可以检查并使用该数组,或只是循环遍历该数组。

您可以检查该值是否为数组,然后递归或迭代该值

if (is_array($value)
{
    // process this array
}
else
{
   // normal path
   $get_url .= $key . '=' . rawurlencode(stripslashes($value)) . '&amp;';
}

< p>您可以将数组序列化为一个字符串和URLCONDER生成字符串,在接收端,您将使用URLDECODE和.

您是否考虑使用HtpPuxBudidQuuy()或“HtpPuxBudIdURL())?

头()与您的问题无关。 您只是无法构建正确的查询字符串


我想知道,尽管有这么多http\u build\u query(),但为什么您的问题仍然存在。

我相信有一个PHP内置函数可以做到这一点,http\u build\u query。这会有帮助吗?简单地用本机函数替换它有什么困难吗?这将是对许多事情的更改,这些更改将相应地进行编码。。我们不知道这些影响,比如说现在是引入的正确时机。这与我的问题有什么关系?甚至都找不到任何幽默(我用三个函数更新了这个问题,我正在使用这些函数构建一个查询,这些函数是内置的osCommerce函数..plss引导我