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 ? '&' : '&';
$Parameters = array('Action' => 'ShowList', 'Page' => '2');
$QueryString = '';
foreach ($Parameters as $Key => $Value)
$QueryString .= $Amp . $Key . '=' . $Value;
Est-il un moyen plus rapide?
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.
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:)
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"}]
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>
Une façon est d'utiliser print_r(array, true)
et il renverra la représentation de chaîne du tableau
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) ;
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"
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"
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);
}
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!