Hướng dẫn how can i get multiple parameters with same name from url in php? - làm cách nào tôi có thể nhận nhiều tham số có cùng tên từ url trong php?

Tôi có một ứng dụng PHP thỉnh thoảng phải xử lý các URL trong đó có nhiều tham số trong URL sẽ có cùng tên. Có một cách dễ dàng để truy xuất tất cả các giá trị cho một khóa nhất định? PHP $ _GET chỉ trả về giá trị cuối cùng.

Để tạo ra bê tông này, ứng dụng của tôi là một trình phân giải OpenUrl và có thể nhận được các tham số URL như thế này:

ctx_ver=Z39.88-2004
&rft_id=info:oclcnum/1903126
&rft_id=//www.biodiversitylibrary.org/bibliography/4323
&rft_val_fmt=info:ofi/fmt:kev:mtx:book
&rft.genre=book
&rft.btitle=At last: a Christmas in the West Indies. 
&rft.place=London,
&rft.pub=Macmillan and co.,
&rft.aufirst=Charles
&rft.aulast=Kingsley
&rft.au=Kingsley, Charles,
&rft.pages=1-352
&rft.tpages=352
&rft.date=1871

[Vâng, tôi biết nó xấu xí, chào mừng bạn đến với thế giới của tôi]. Lưu ý rằng khóa "RFT_ID" xuất hiện hai lần:

  1. $query  = explode['&', $_SERVER['QUERY_STRING']];
    $params = array[];
    
    foreach[ $query as $param ]
    {
      // prevent notice on explode[] if $param has no '='
      if [strpos[$param, '='] === false] $param += '=';
    
      list[$name, $value] = explode['=', $param, 2];
      $params[urldecode[$name]][] = urldecode[$value];
    }
    
    2
  2. $query  = explode['&', $_SERVER['QUERY_STRING']];
    $params = array[];
    
    foreach[ $query as $param ]
    {
      // prevent notice on explode[] if $param has no '='
      if [strpos[$param, '='] === false] $param += '=';
    
      list[$name, $value] = explode['=', $param, 2];
      $params[urldecode[$name]][] = urldecode[$value];
    }
    
    3

$query  = explode['&', $_SERVER['QUERY_STRING']];
$params = array[];

foreach[ $query as $param ]
{
  // prevent notice on explode[] if $param has no '='
  if [strpos[$param, '='] === false] $param += '=';

  list[$name, $value] = explode['=', $param, 2];
  $params[urldecode[$name]][] = urldecode[$value];
}
4 sẽ trả về chỉ
$query  = explode['&', $_SERVER['QUERY_STRING']];
$params = array[];

foreach[ $query as $param ]
{
  // prevent notice on explode[] if $param has no '='
  if [strpos[$param, '='] === false] $param += '=';

  list[$name, $value] = explode['=', $param, 2];
  $params[urldecode[$name]][] = urldecode[$value];
}
5, giá trị trước đó [
$query  = explode['&', $_SERVER['QUERY_STRING']];
$params = array[];

foreach[ $query as $param ]
{
  // prevent notice on explode[] if $param has no '='
  if [strpos[$param, '='] === false] $param += '=';

  list[$name, $value] = explode['=', $param, 2];
  $params[urldecode[$name]][] = urldecode[$value];
}
6] đã bị ghi đè.

Tôi muốn có quyền truy cập vào cả hai giá trị. Điều này có thể trong PHP không? Nếu không, bất kỳ suy nghĩ về cách xử lý vấn đề này?

Tomalak

326K66 Huy hiệu vàng516 Huy hiệu bạc619 Huy hiệu Đồng66 gold badges516 silver badges619 bronze badges

Đã hỏi ngày 9 tháng 12 năm 2008 lúc 16:33Dec 9, 2008 at 16:33

1

Cái gì đó như:

$query  = explode['&', $_SERVER['QUERY_STRING']];
$params = array[];

foreach[ $query as $param ]
{
  // prevent notice on explode[] if $param has no '='
  if [strpos[$param, '='] === false] $param += '=';

  list[$name, $value] = explode['=', $param, 2];
  $params[urldecode[$name]][] = urldecode[$value];
}

mang đến cho bạn:

array[
  'ctx_ver'     => array['Z39.88-2004'],
  'rft_id'      => array['info:oclcnum/1903126', '//www.biodiversitylibrary.org/bibliography/4323'],
  'rft_val_fmt' => array['info:ofi/fmt:kev:mtx:book'],
  'rft.genre'   => array['book'],
  'rft.btitle'  => array['At last: a Christmas in the West Indies.'],
  'rft.place'   => array['London'],
  'rft.pub'     => array['Macmillan and co.'],
  'rft.aufirst' => array['Charles'],
  'rft.aulast'  => array['Kingsley'],
  'rft.au'      => array['Kingsley, Charles'],
  'rft.pages'   => array['1-352'],
  'rft.tpages'  => array['352'],
  'rft.date'    => array['1871']
]

Vì luôn có thể lặp lại một tham số URL, nên tốt hơn là luôn luôn có các mảng, thay vì chỉ cho các tham số mà bạn dự đoán chúng.

Đã trả lời ngày 9 tháng 12 năm 2008 lúc 16:46Dec 9, 2008 at 16:46

TomalaktomalakTomalak

326K66 Huy hiệu vàng516 Huy hiệu bạc619 Huy hiệu Đồng66 gold badges516 silver badges619 bronze badges

9

Đã hỏi ngày 9 tháng 12 năm 2008 lúc 16:33

IE:

someurl.php?name[]=aaa&name[]=bbb

Cái gì đó như:

array[0=>'aaa', 1=>'bbb']

mang đến cho bạn:Dec 9, 2008 at 16:41

Vì luôn có thể lặp lại một tham số URL, nên tốt hơn là luôn luôn có các mảng, thay vì chỉ cho các tham số mà bạn dự đoán chúng.benlumley

Đã trả lời ngày 9 tháng 12 năm 2008 lúc 16:462 gold badges38 silver badges39 bronze badges

2

Tomalaktomalak

Sẽ không hoạt động cho bạn vì có vẻ như bạn không kiểm soát trình tự truy vấn, nhưng một câu trả lời hợp lệ khác: thay vì phân tích cú pháp trình điều khiển, bạn có thể áp dụng '[]' mặt hàng.

$query = $_SERVER['QUERY_STRING'];
$vars = array[];
foreach [explode['&', $query] as $pair] {
    list[$key, $value] = explode['=', $pair];
    $vars[] = array[urldecode[$key], urldecode[$value]];
}

Sẽ cung cấp cho bạn một $ _get trông giống như:

array[
    array['ctx_ver'     => 'Z39.88-2004'],
    array['rft_id'      => 'info:oclcnum/1903126'],
    array['rft_id'      => '//www.biodiversitylibrary.org/bibliography/4323'],
    array['rft_val_fmt' => 'info:ofi/fmt:kev:mtx:book'],
    array['rft.genre'   => 'book'],
    array['rft.btitle'  => 'At last: a Christmas in the West Indies.'],
    array['rft.place'   => 'London'],
    array['rft.pub'     => 'Macmillan and co.'],
    array['rft.aufirst' => 'Charles'],
    array['rft.aulast'  => 'Kingsley'],
    array['rft.au'      => 'Kingsley, Charles'],
    array['rft.pages'   => '1-352'],
    array['rft.tpages'  => '352'],
    array['rft.date'    => '1871']
]

Đã trả lời ngày 9 tháng 12 năm 2008 lúc 16:41

BenlumleybenlumleyDec 9, 2008 at 16:37

11.3k2 Huy hiệu vàng38 Huy hiệu bạc39 Huy hiệu đồngStefan Gehrig

Tôi nghĩ rằng bạn phải phân tích thủ công

$query  = explode['&', $_SERVER['QUERY_STRING']];
$params = array[];

foreach[ $query as $param ]
{
  // prevent notice on explode[] if $param has no '='
  if [strpos[$param, '='] === false] $param += '=';

  list[$name, $value] = explode['=', $param, 2];
  $params[urldecode[$name]][] = urldecode[$value];
}
7.24 gold badges155 silver badges186 bronze badges

1

Một cái gì đó như [chưa được kiểm tra]:

// Replace `&x=1&x=2` into `x[]=1&x[]=2`
$qs = preg_replace["/[?

Bài Viết Liên Quan

Chủ Đề