Search code examples
phpstringurllang

How can I make this work? http_build_query example


How can I addapt the following http_build_query script for my webpage?

$params = array(
    'p'    => 'foo',
    'lang' => 'bar'
);

echo http_build_query($params); // p=foo&lang=bar

echo '?' . http_build_query($params); // ?p=foo&lang=bar

Related to PHP url strings conflict "?" and "&"

Here's how my page works:

<a href="?lang=es">Español</a>
<a href="?lang=en">English</a>

<?php
    $p = $_GET['p'];
    $pages = array('g1', 'g2', 'g3');
    if (!empty($p)) {
        if(in_array($p,$pages)) {
            $p .= '.php';
            include($p);
        }
    }
    else {
        echo '<a href="?p=g1">Page 1</a> <a href="?p=g2">Page 2</a></li> <a href="?p=g3">Page 3</a>';
    }
?>

Solution

  • You could write a function to merge query parameters with the current $_GET array.

    <?php
    function merge_queries(array $original, array $updates) {
        $params = array_merge($original, $updates);
        return '?'.http_build_query($params);
    }
    ?>
    
    <a href="<?php echo merge_queries($_GET, array('lang'=>'es')); ?>">Español</a>
    <a href="<?php echo merge_queries($_GET, array('lang'=>'en')); ?>">English</a>
    
    <?php
    // code abbreviated for clarity
    echo '<a href="'.merge_queries($_GET, array('p'=>'g1')).'">Page 1</a>
          <a href="'.merge_queries($_GET, array('p'=>'g2')).'">Page 2</a>
          <a href="'.merge_queries($_GET, array('p'=>'g3')).'">Page 3</a>';
    ?>