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

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

Ma première inclination est d'utiliser foreach mais comme ma méthode pourrait être appelée plusieurs fois dans 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;

Est-il un moyen plus rapide?

100
demandé sur womp 2009-01-03 00:06:17

10 réponses

Vous pouvez utiliser http_build_query() de le faire.

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

152
répondu Greg 2013-01-05 07:24:41

En aparté, j'étais à la recherche de trouver le meilleur moyen d'imploser un tableau associatif mais en utilisant mes propres séparateurs, etc...

J'ai donc fait cela en utilisant la fonction array_walk () de PHP pour me permettre de joindre un tableau associatif dans une liste de paramètres qui pourraient 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 coller cela dans votre propre fonction d'une manière ou d'une autre, 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 aide quelqu'un:)

32
répondu 2009-02-03 14:06:21

Si vous n'êtes pas préoccupé par le formatageexact , 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 aussi bien sur d'autres types de données)

$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]
25
répondu scunliffe 2014-10-12 03:12:17

C'est ma solution par exemple pour un div data-attributes:

<?

$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
répondu user4846194 2015-04-29 11:41:20

Une façon est d'utiliser print_r(array, true) et il renverra la représentation de chaîne du tableau

17
répondu dino.keco 2013-05-30 02:42:54
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
répondu Softmixt 2015-07-28 10:25:08

Un 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
répondu WackGet 2017-04-27 18:30:22

Qu'en est-il de ce plus court, plus transparent, mais plus intuitif 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
répondu FantomX1 2017-11-08 20:36:29

C'est la version la plus basique à laquelle je peux penser:

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}
-1
répondu Failpunk 2011-03-18 02:49:33
echo implode(",", array_keys($companies->toArray()));

$companies->toArray() -- c'est juste au cas où votre $variable est un objet, sinon il suffit de passer $companies.

C'est ça!

-3
répondu Hardik Raval 2016-03-11 05:37:40