Как создать следующую строку с массивом в нем?

У меня есть массив от $ _GET, говорят

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

для которого я использую этот цикл с условием продолжения для создания строки:

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

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

      }

Теперь, если я добираюсь, массив от $ _GET говорят как:

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

)

затем в этом случае что могло быть возможными изменениями быть сделанным к циклу с условием продолжения так, чтобы я мог избежать результата как этот http://www.example.com/shopping_cart.php?0=pid&1=gid&2=Array в URL, когда я использую это для перенаправления его. Я хочу, чтобы URL отобразил значения правильно.. не как "2=Array".. как я могу сделать это?

Править

Спасибо Люди для справки, но я не могу представить новую функцию ни один, чем я могу заменить цикл с условием продолжения для цикла, я был бы очень благодарен, если можно помочь мне в переиздании данного ЦИКЛА С УСЛОВИЕМ ПРОДОЛЖЕНИЯ...

РЕДАКТИРОВАНИЕ 2

Я использую header(location:$get_url) для перенаправления к созданному URL действительно ли это - проблема с дисплеем "2=Array" в URL?

РЕДАКТИРОВАНИЕ 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('

' . 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('

' . TEP_HREF_LINK_ERROR2); } if (tep_not_null($parameters)) { while ( (substr($parameters, -5) == '&') ) $parameters = substr($parameters, 0, strlen($parameters)-5); $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } 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 .=  '&';
    }

    return $get_url;
  }

========================

tep_redirect(tep_href_link($goto, tep_get_all_get_paramtrs($parameters)));

здесь $parameters является массивом с двумя значениями, который не имеет никакого подобия с логикой дисплея URL

1
задан OM The Eternity 24 June 2010 в 06:05
поделиться

6 ответов

Если вы хотите создать URL-адрес из многомерного массива, вы должны использовать рекурсию или просто встроенную функцию php, которая приводит к тому же результату, что и созданная мной функция http-build-query () (как сказал Морис Херлакян). Это самый простой способ сделать это.

Пример рекурсивной функции:

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

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

    return $url;
}
1
ответ дан 2 September 2019 в 23:34
поделиться

вы рассматривали возможность использования http_build_query() или http_build_url()?

2
ответ дан 2 September 2019 в 23:34
поделиться

Вы можете проверить с помощью is_array и использовать implode или просто просмотреть массив, если вам нужны разные ключи, например 2_0, 2_1.

0
ответ дан 2 September 2019 в 23:34
поделиться

Вы можете проверить, является ли значение массивом, затем выполнить перебор или итерацию по нему...

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

http://php.net/manual/en/function.is-array.php

0
ответ дан 2 September 2019 в 23:34
поделиться

Вы можете использовать serialize для сериализации массива в одну строку и urlencode этой полученной строки, на принимающей стороне вы можете использовать urldecode и unserialize.

-1
ответ дан 2 September 2019 в 23:34
поделиться

header () ничего не имеет что делать с твоей проблемой.
вы просто не можете построить правильную строку запроса
И мне интересно, почему ваша проблема все еще сохраняется, несмотря на все эти http_build_query (), о которых вам уже говорили

0
ответ дан 2 September 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: