Pregunta

Estoy buscando una forma rápida de convertir una matriz asociativa en una cadena. La estructura típica sería como una cadena de consulta de URL pero con separadores personalizables, así que puedo usar ' & amp; ' para enlaces xhtml o ' & amp; ' de lo contrario.

Mi primera inclinación es usar foreach pero como mi método podría llamarse muchas veces en una solicitud, me temo que podría ser demasiado lento.

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

¿Hay una manera más rápida?

¿Fue útil?

Solución

Puedes usar http_build_query () para hacer eso.

  

Genera una cadena de consulta codificada en URL a partir de la matriz asociativa (o indexada) proporcionada.

Otros consejos

Aparte de eso, estaba buscando para encontrar la mejor manera de implosionar una matriz asociativa pero utilizando mis propios separadores, etc. ...

Así que hice esto usando la función array_walk () de PHP para que me permitiera unir una matriz asociativa en una lista de parámetros que luego podrían aplicarse a una etiqueta 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

Obviamente, podrías incluirlo en tu propia función de alguna manera, pero te da una idea de cómo puedes unirte a una matriz asociativa usando tu propio método. Espero que ayude a alguien :)

Si no le preocupa el formato exacto , sí quiere algo simple, pero sin los saltos de línea de print_r también puede usar json_encode ($ valor) para una salida formateada rápida y simple. ( tenga en cuenta que también funciona bien en otros tipos de datos )

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

Esta es mi solución, por ejemplo, para los atributos de datos 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>

Una forma es usar print_r (array, true) y devolverá la representación de cadena de la matriz

Una sola línea para crear una cadena de atributos HTML (con comillas) a partir de una matriz simple:

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

Ejemplo:

$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é hay de esto más corto, más transparente, pero más 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"

Mi solución:

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

Esta es la versión más básica que se me ocurre:

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

$ companies- > toArray () - esto es solo en caso de que su $ variable sea un objeto, de lo contrario simplemente pase $ empresas.

Eso es todo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top