Domanda

Sto cercando un modo rapido per trasformare un array associativo in una stringa. La struttura tipica sarebbe come una stringa di query URL ma con separatori personalizzabili in modo da poter usare ' & amp; amp; ' per i collegamenti xhtml o ' & amp; ' altrimenti.

La mia prima inclinazione è usare foreach ma dato che il mio metodo potrebbe essere chiamato molte volte in una richiesta, temo che potrebbe essere troppo lento.

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

C'è un modo più veloce?

È stato utile?

Soluzione

Puoi usare http_build_query () per farlo.

  

Genera una stringa di query con codifica URL dall'array associativo (o indicizzato) fornito.

Altri suggerimenti

A parte questo, ero alla ricerca di un modo migliore per implodere un array associativo ma usando i miei separatori, ecc ...

Quindi l'ho fatto usando la funzione array_walk () di PHP per farmi unire un array associativo in un elenco di parametri che potrebbero essere applicati a un tag 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

Ovviamente, potresti in qualche modo tenerlo nella tua funzione, ma ti dà un'idea di come puoi unirti ad un array associativo usando il tuo metodo. Spero che aiuti qualcuno :)

Se non sei preoccupato per la formattazione esatta , tuttavia vuoi qualcosa di semplice ma senza le interruzioni di riga di print_r puoi anche usare json_encode ($ valore) per un output formattato rapido e semplice. ( nota che funziona bene anche su altri tipi di dati )

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

Questa è la mia soluzione, ad esempio, per un div attributi di dati:

<?

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

Un modo sta usando print_r (array, true) e restituirà la rappresentazione in formato stringa dell'array

Una riga per la creazione di una stringa di attributi HTML (con virgolette) da un semplice array:

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

Esempio:

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

Che dire di questo più breve, più trasparente, ma più intuitivo con 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"

La mia soluzione:

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

Questa è la versione più semplice che mi viene in mente:

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

$ companies- > toArray () - questo è solo nel caso in cui la tua $ variabile sia un oggetto, altrimenti passa solo $ company.

Questo è tutto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top