Http_build_query() pour php 4

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 910 fois - Téléchargée 19 fois

Contenu du snippet

Version PHP 4 de la fonction http_build_query() disponible sous PHP 5 et ma foi bien pratique... .. .

Source / Exemple :


<?php

// on vérifie quand même que la fonction n'existe pas
if(!function_exists('http_build_query'))
{
    function http_build_query( $formdata, $numeric_prefix = '', $arg_separator = null)
    {
        //on vérifie les données
        if(!is_array($formdata) && !is_object($formdata))
            return false;
                elseif(empty($formdata))
                    return '';
        
        // si le séparateur n'est pas soumis on prend celui de la config serveur 
        if(is_null($arg_separator))
        {
            $arg_separator = @ini_get('arg_separator.output');
            
            if(!$arg_separator) 
                $arg_separator = '&';
        }
        
        // création du builder interne qui servira à parcourir récursivement les tableaux et objets
        $builderCore = '$ret = \'\';
        
        foreach ($array as $k => $v) 
        {
            if (is_scalar($v))
                $ret .= $name.urlencode(\'[\'.$k.\']\').\'=\'.urlencode($v).$sep;
            else
            {
                $builder = create_function(\' $name, $array, $sep, $builderCore\', $builderCore);
                $ret .= $builder( $name.urlencode(\'[\'.$k.\']\'), $v, $sep, $builderCore).$sep;
            }
        }
        return substr( $ret, 0, -strlen($sep));';
        
        $builder = create_function(' $name, $array, $sep, $builderCore', $builderCore);
        
        // on parcours nos données
        $ret = '';
        
        foreach($formdata as $k => $v)
        {
            if (is_integer($k))
                $k = $numeric_prefix.$k;
            
            if(is_scalar($v))
            {
                $ret .= urlencode($k).'='.urlencode($v).$arg_separator;
                continue;
            }
            
            $ret .= $builder( urlencode($k), $v, $arg_separator, $builderCore).$arg_separator;
        }
        
        // on renvois après avoir enlevé le dernier séparateur
        return substr( $ret, 0, -strlen($arg_separator));
    }
}

/*** Exemple d'utilisation ***/

$datas = array(
                'baz' => 'boom',
                'cow' => 'milk',
                'php' => 'hypertext processor',
                'foo' => array(
                                'bar',
                                'foo'
                        ),
                'pwet',
                'plop'
    );

$query1 = http_build_query($datas);
$query2 = http_build_query($datas, '', '&');
$query3 = http_build_query($datas, 'myVar_');

echo '<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>http_build_query($data)</legend>
		http_build_query($datas) :            
		     <a href="?'.$query1.'">'.htmlentities($query1).'</a>
			<br />
		http_build_query($datas, \'\', \'&amp;\') : <a href="?'.$query2.'">'.htmlentities($query2).'</a>
			<br />
		http_build_query($datas, \'myVar_\') :   <a href="?'.$query3.'">'.htmlentities($query3).'</a>
    <br />
</fieldset>
<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>$datas</legend>
	<pre>
		'.print_r($datas,true).'
	</pre>
</fieldset>';

if(!empty($_GET))
    echo '<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>$_GET</legend>
	<pre>
		'.print_r($_GET,true).'
	</pre>
</fieldset>';

?>

Conclusion :


Je ne met pas de fichier d'exemple le bout de code ci dessus étant amplement suffisant... .. .

@ tchaOo°

A voir également

Ajouter un commentaire

Commentaires

kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

les espaces en trop ne servent qu'a rajouter des octets inutile dans le code...

if(isset($pwet))

est aussi lisible que...

if( isset ($pwet) )

Ca n'a rien à voir avec l'indentation du code... après à chacun sa façon de coder mais dans ce cas je ne vois pas l'intérêt d'enlever des points à une note parce qu'il manque des espaces à TON gout... c'est comme enlever des points parce que j'aurais préféré que la variable $pwet s'appelle $plop... bref... discussion inutile et sans intérêt à mon sens... merci pour ton com, bonne continuation... .. . :o)

@ tchaOo°

ps: au boulot je bosse actuellement sur une source d'à peu près 45000 lignes et personnellement je trouve tout aussi clair et même plus clair un bloc de condition simple sans accolade... mais comme tu l'as dis c'est une question d'habitude... les gouts et les couleurs... .. . ;o)
LPUnderground
Messages postés
7
Date d'inscription
dimanche 20 juillet 2008
Statut
Membre
Dernière intervention
20 avril 2010

Comme je l'ai dit ça dépend que de nous, de la façon dont on code.

Personnellement pour de longs codes (pour des scripts, sites, etc), je préfère faire des blocs de condition même s'il y a qu'une seule exéctuin.

Les espaces, c'est ma façon à moi d'écrire du code, après certes tu fais comme tu veux.
Il y a une différence entre "mon" code et le tien, moi j'aime bien espacer : )

Je te remercie encore pour ton code.
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Je vois toujours pas pourquoi tu dis ça... hormis les accolades il n'y a pas de différence entre ton code et mon code et je ne vois pas l'interêt de faire un bloc de condition pour une seule instruction... .. .

Qui plus est je ne vois pas le rapport avec les espaces... si tu parle de l'indentation de mon code c'est surement parce que tu as utilisé firefox lorsque tu as récupéré le code... fais un copié collé à partir d'IE et tu retrouvera l'indentation comme sur la présentation du code... .. . ;o)

@ tchaOo°
LPUnderground
Messages postés
7
Date d'inscription
dimanche 20 juillet 2008
Statut
Membre
Dernière intervention
20 avril 2010

Exemple (au début de ton code) :

if(!is_array($formdata) && !is_object($formdata))
return false;
elseif(empty($formdata))
return '';

J'aurais écrit cela :

if ( ! is_array ( $formdata ) && ! is_object ( $formdata ) )
{
return FALSE;
}
else if ( empty ( $formdata ) )
{
return '';
}

Bon bien sur, je peux pas te reprocher ça, étant donné que cela dépend de la manière de coder des gens ; )
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

je n'espace pas mon code... qu'entend tu par là... .. ?

@ tchaOo°

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.