web-dev-qa-db-fra.com

Moyen le plus rapide d'imploser un tableau associatif avec des clés

Je cherche un moyen rapide de transformer un tableau associatif en chaîne. Une structure typique ressemblerait à une chaîne de requête d'URL mais avec des séparateurs personnalisables afin que je puisse utiliser '&' pour les liens xhtml ou '&' sinon.

Ma première tendance est d’utiliser foreach, mais comme ma méthode peut être appelée plusieurs fois en une requête, je crains qu’elle ne soit trop lente.

<?php
$Amp = $IsXhtml ? '&amp;' : '&';
$Parameters = array('Action' => 'ShowList', 'Page' => '2');
$QueryString = '';
foreach ($Parameters as $Key => $Value)
        $QueryString .= $Amp . $Key . '=' . $Value;

Y at-il un moyen plus rapide?

106
matpie

Vous pouvez utiliser http_build_query() pour le faire.

Génère une chaîne de requête codée en URL à partir du tableau associatif (ou indexé) fourni.

161
Greg

En passant, je cherchais le meilleur moyen d'imploser un tableau associatif, mais en utilisant mes propres séparateurs, etc.

J'ai donc utilisé la fonction array_walk () de PHP pour me permettre de joindre un tableau associatif à une liste de paramètres pouvant ensuite être appliqués à une balise HTML ....

// Create Params Array
$p = Array("id"=>"blar","class"=>"myclass","onclick"=>"myJavascriptFunc()");

// Join Params
array_walk($p, create_function('&$i,$k','$i=" $k=\"$i\"";'));
$p_string = implode($p,"");

// Now use $p_string for your html tag

Évidemment, vous pouvez en tenir à votre propre fonction, mais cela vous donne une idée de la façon dont vous pouvez rejoindre un tableau associatif en utilisant votre propre méthode . J'espère que cela aidera quelqu'un :)

32
Adam

Si vous n'êtes pas préoccupé par la mise en forme exacte , vous voulez quelque chose de simple, mais sans les sauts de ligne de print_r, vous pouvez également utiliser json_encode($value) pour une sortie formatée rapide et simple. ( notez que cela fonctionne bien sur d'autres types de données aussi )

$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]
27
scunliffe

Voici ma solution par exemple pour un attribut div data:

<?

$attributes = array(
    'data-href'   => 'http://example.com',
    'data-width'  => '300',
    'data-height' => '250',
    'data-type'   => 'cover',
);

$dataAttributes = array_map(function($value, $key) {
    return $key.'="'.$value.'"';
}, array_values($attributes), array_keys($attributes));

$dataAttributes = implode(' ', $dataAttributes);

?>

<div class="image-box" <?= $dataAttributes; ?> >
    <img src="http://example.com/images/best-of.jpg" alt="">
</div>
19
user4846194

Une façon utilise print_r(array, true) et il retournera la représentation sous forme de chaîne du tableau

17
dino.keco

Ma solution:

$url_string = http_build_query($your_arr);
$res = urldecode($url_string); 
0
kostikovmu
function array_to_attributes ( $array_attributes )
{

    $attributes_str = NULL;
    foreach ( $array_attributes as $attribute => $value )
    {

        $attributes_str .= " $attribute=\"$value\" ";

    }

    return $attributes_str;
}

$attributes = array(
    'data-href'   => 'http://example.com',
    'data-width'  => '300',
    'data-height' => '250',
    'data-type'   => 'cover',
);

echo array_to_attributes($attributes) ;
0
Softmixt

One-liner pour créer une chaîne d'attributs HTML (avec des guillemets) à partir d'un tableau simple:

$attrString = str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";

Exemple:

$attrArray = array("id"    => "email", 
                   "name"  => "email",
                   "type"  => "email",
                   "class" => "active large");

echo str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";

// Output:
// id="email" name="email" type="email" class="active large"
0
WackGet

Et pourquoi pas avec array_walk

$attributes = array(
  'data-href'   => 'http://example.com',
  'data-width'  => '300',
  'data-height' => '250',
  'data-type'   => 'cover',
);

$args = "";
array_walk(
    $attributes, 
    function ($item, $key) use (&$args) {
        $args .= $key ." = '" . $item . "' ";  
    }
);
// output: 'data-href="http://example.com" data-width="300" data-height="250" data-type="cover"
0
FantomX1