<?php
//-- usage
$_SERVER['REQUEST_URI'] = 'foo.com/blah?a=1&b=2';
function get_link( $my_params )
{
$param_querystring = "";
$http_host = $_SERVER['HTTP_HOST'];
//-- get the part of the url before the querystring, if applicable
$url = explode( '?', $_SERVER['REQUEST_URI'] );
$request_uri = $url[0];
$querystring = $url[1];
foreach ( $my_params as $param_key => $param_value )
{
$param_querystring .= $param_key . '=' . $param_value;
}
if ( empty( $querystring ) ) {
//-- generates foo.com/blah?x=1&y=2&z=string if no
//-- querystring was present
$link = $request_uri . '?' . $param_querystring;
}
else
{
//-- generates foo.com/blah?a=1&b=2&x=1&y=2&z=string if a=1&b=2
//-- querystring was already present.
$link = $request_uri . $querystring . '&' . $param_querystring;
}
return $link;
}
function assertEquals($a, $b) {
if ($a === $b)
return true;
echo "Failed assertion; got: $a\n";
echo " expected: $b\n";
}
assertEquals
(get_link
(array('x' => 1, 'y' => 2, 'z' => 'string')), 'foo.com/blah?a=1&b=2&x=1&y=2&z=string');
PD9waHAKLy8tLSB1c2FnZQoKJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gPSAnZm9vLmNvbS9ibGFoP2E9MSZiPTInOwpmdW5jdGlvbiBnZXRfbGluayggJG15X3BhcmFtcyApCnsgICAKICAgICRwYXJhbV9xdWVyeXN0cmluZyA9ICIiOwogICAgJGh0dHBfaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKCiAgICAvLy0tIGdldCB0aGUgcGFydCBvZiB0aGUgdXJsIGJlZm9yZSB0aGUgcXVlcnlzdHJpbmcsIGlmIGFwcGxpY2FibGUKICAgICR1cmwgPSBleHBsb2RlKCAnPycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddICk7CgogICAgJHJlcXVlc3RfdXJpID0gJHVybFswXTsKICAgICRxdWVyeXN0cmluZyA9ICR1cmxbMV07CgogICAgZm9yZWFjaCAoICRteV9wYXJhbXMgYXMgJHBhcmFtX2tleSA9PiAkcGFyYW1fdmFsdWUgKQogICAgewogICAgICAgICRwYXJhbV9xdWVyeXN0cmluZyAuPSAkcGFyYW1fa2V5IC4gJz0nIC4gJHBhcmFtX3ZhbHVlOwogICAgfQoKICAgIGlmICggZW1wdHkoICRxdWVyeXN0cmluZyApICkKICAgIHsKICAgICAgICAvLy0tIGdlbmVyYXRlcyBmb28uY29tL2JsYWg/eD0xJnk9MiZ6PXN0cmluZyBpZiBubwogICAgICAgIC8vLS0gcXVlcnlzdHJpbmcgd2FzIHByZXNlbnQKICAgICAgICAkbGluayA9ICRyZXF1ZXN0X3VyaSAuICc/JyAuICRwYXJhbV9xdWVyeXN0cmluZzsKICAgIH0KICAgIGVsc2UKICAgIHsKCiAgICAgICAgLy8tLSBnZW5lcmF0ZXMgZm9vLmNvbS9ibGFoP2E9MSZiPTImeD0xJnk9MiZ6PXN0cmluZyBpZiBhPTEmYj0yIAogICAgICAgIC8vLS0gcXVlcnlzdHJpbmcgd2FzIGFscmVhZHkgcHJlc2VudC4KICAgICAgICAkbGluayA9ICRyZXF1ZXN0X3VyaSAuICRxdWVyeXN0cmluZyAuICcmJyAuICRwYXJhbV9xdWVyeXN0cmluZzsKICAgIH0KCiAgICByZXR1cm4gJGxpbms7Cn0KZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKCRhLCAkYikgewoJaWYgKCRhID09PSAkYikKCQlyZXR1cm4gdHJ1ZTsKCWVjaG8gIkZhaWxlZCBhc3NlcnRpb247IGdvdDogJGFcbiI7CgllY2hvICIgICAgICAgICAgICAgZXhwZWN0ZWQ6ICRiXG4iOwp9CmFzc2VydEVxdWFscyhnZXRfbGluayhhcnJheSgneCcgPT4gMSwgJ3knID0+IDIsICd6JyA9PiAnc3RyaW5nJykpLAoJCQkgJ2Zvby5jb20vYmxhaD9hPTEmYj0yJng9MSZ5PTImej1zdHJpbmcnKTs=