将数组作为 url 参数传递

2022-08-30 07:07:59

将数组作为 url 参数传递的最佳方式是什么?我在想这是否可能:

$aValues = array();

$url = 'http://www.example.com?aParam='.$aValues;

或者怎么样:

$url = 'http://www.example.com?aParam[]='.$aValues;

我读了例子,但我发现它很混乱:

$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';

答案 1

有一个非常简单的解决方案:http_build_query()。它将查询参数作为关联数组:

$data = array(
    1,
    4,
    'a' => 'b',
    'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));

会再来

string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"

http_build_query()为您处理所有必要的转义( => 和 => ),因此此字符串等于 。%5B[%5D]aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d


答案 2

编辑:不要错过上面的Stefan的解决方案,它使用了非常方便的http_build_query()函数:https://stackoverflow.com/a/1764199/179125

针织品关于逃跑是正确的。但是,有一种更简单的方法可以做到这一点:

$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));

如果要使用关联数组执行此操作,请尝试以下操作:

PHP 5.3+ (lambda 函数)

$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
    return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
  },
  array_keys($aValues), $aValues)
);

PHP <5.3 (回调)

function urlify($key, $val) {
  return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}

$url = 'http://example.com/index.php?';
$url .= implode('&amp;', array_map('urlify', array_keys($aValues), $aValues));