Frage

Ich bin auf der Suche nach einem schnellen Weg, um ein assoziatives Array in einen String zu drehen. Typische Struktur wie ein URL Query-String sein würde, aber mit anpassbaren Separatoren so I ‚&‘ für xhtml Links verwenden oder ‚&‘ sonst.

Meine erste Neigung ist foreach zu verwenden, aber da meine Methode viele Male in einer Anfrage nennen könnte ich es befürchten könnte zu langsam sein.

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

Gibt es einen schnelleren Weg?

War es hilfreich?

Lösung

Sie können mit http_build_query() , das zu tun.

  

Erzeugt eine URL-kodierten Abfragezeichenfolge aus dem assoziativen (oder indizierte) -Anordnung versehen ist.

Andere Tipps

Als beiseite, ich war auf der Suche, den besten Weg zu finden, ein assoziatives Array implodieren, aber meinen eigenen seperators mit etc ...

Also ich habe diese PHP array_walk () -Funktion lassen Sie mich ein assoziatives Array in eine Liste von Parametern zu verbinden, die dann zu einem HTML-Tag angewendet werden könnte ....

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

Natürlich könnten Sie dabei bleiben in Ihrer eigenen Funktion irgendwie, aber es gibt Ihnen eine Vorstellung davon, wie Sie ein assoziatives Array Ihre eigene Methode beitreten können. Hoffe, das hilft jemand:)

Wenn Sie nicht besorgt sind über die genau Formatierung aber Sie etwas wollen einfache, aber ohne die Zeilenumbrüche von print_r können Sie auch json_encode($value) für eine schnelle und einfache formatierte Ausgaben verwenden. ( beachten Sie, es funktioniert gut auf andere Datentypen zu )

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

Dies ist meine Lösung zum Beispiel für ein div Daten-Attribute:

<?

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

Ein Weg ist mit print_r(array, true) und es wird String-Darstellung von Array zurück

A one-Liner für Reihe von HTML-Attribute (mit Anführungszeichen) von einer einfachen Anordnung zu schaffen:

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

Beispiel:

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

Was ist diese kürzer, transparenter, noch intuitiver mit 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"

Meine Lösung:

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

Dies ist die einfachste Version, die ich mir vorstellen kann:

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

$companies->toArray() - dies ist nur für den Fall, wenn Ihr $variable ist ein Objekt, sonst nur $ Unternehmen übergeben.

Das ist es!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top