2010-06-23 63 views
1

我有一個數組從$ _GET說如何在數組中創建下面的字符串?

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

爲此我使用這個while循環創建一個字符串:

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 
     ) 

) 

那麼在這種情況下,這可能是可能發生的變化需做while循環,這樣我就可以避免這樣的結果在URL中,當我使用它來重定向它。 我想要的URL正確顯示值..不像「2 =陣列」..我該怎麼做?

編輯

感謝鄉親們的幫助,但我不能引入新的功能,無論是我可以替換for循環中,我會非常心存感激,如果你能幫助我重新while循環編輯專給定while循環...

EDIT 2

我使用header(location:$get_url)重定向到創建的url,這是在URL中顯示「2 = Array」的問題嗎?

EDIT 3

用於構建查詢,NOTE

功能:這些功能自從的內置功能

我仍然通過引入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))); 

這裏$參數是與犯規如果你想創建一個有URL顯示邏輯

+1

我相信有一個PHP的內置函數,這樣做, http_build_query。這會有幫助嗎? – 2010-06-23 13:33:37

+0

簡單地用本地函數替換它有什麼困難? – Gordon 2010-06-23 13:56:33

+0

它會改變很多東西,因此編碼..我們不知道這些影響 – 2010-06-23 13:57:38

回答

1

任何resemblence兩個值的數組來自多維數組的url,你應該使用遞歸或者只是內置的php函數,其結果與我創建的函數http-build-query()(就像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; 
} 
+0

謝謝請參閱更新的問題 – 2010-06-23 13:55:17

0

您可以用is_array檢查,如果你想不同的按鍵,比如2_0使用implode或只是遍歷數組,2_1。

0

您可以檢查是否值是一個數組,然後遞歸或迭代它...

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

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

-1

你可以使用serialize到數組序列化爲一個字符串,並用urlencode那生成的字符串,在接收端,您將使用urldecode和unserialize

2

您是否考慮使用http_build_query()或http_build_url()?

0

header()與您的問題無關。
你只是無法建立正確的查詢字符串
我不知道爲什麼你的問題是仍然存在的,儘管所有這些http_build_query(),你已經被告知已經

+0

我更新了三個功能,我用來建立一個查詢,這些功能是內置osCommerce功能的問題.. PLSS指導我 – 2010-06-24 06:05:27

相關問題