Question

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 ' & amp; ' pour les liens xhtml ou ' & amp; ' sinon.

Ma première tendance est d'utiliser foreach , mais comme ma méthode peut être appelée plusieurs fois en une seule 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 a-t-il un moyen plus rapide?

Était-ce utile?

La solution

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.

Autres conseils

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. Espérons que cela aide quelqu'un:)

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

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

Voici ma solution par exemple pour un attribut de données div:

<?

$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>

L’une des méthodes consiste à utiliser print_r (array, true) et elle renverra une représentation sous forme de chaîne du tableau

Une ligne 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"
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) ;

Qu'en est-il de ce plus court, plus transparent, et pourtant 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"

Ma solution:

$url_string = http_build_query($your_arr);
$res = urldecode($url_string); 

Voici la version la plus basique à laquelle je puisse penser:

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}
echo implode(",", array_keys($companies->toArray()));

$ companies- > toArray () - ceci est juste au cas où votre $ variable est un objet, sinon passez simplement $ companies.

C'est tout!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top