Fastest way to implode an associative array with keys

PhpArraysQuery StringAssociative ArrayImplode

Php Problem Overview


I'm looking for a fast way to turn an associative array in to a string. Typical structure would be like a URL query string but with customizable separators so I can use '&' for xhtml links or '&' otherwise.

My first inclination is to use foreach but since my method could be called many times in one request I fear it might be too slow.

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

Is there a faster way?

Php Solutions


Solution 1 - Php

You can use http_build_query() to do that.

> Generates a URL-encoded query string from the associative (or indexed) array provided.

Solution 2 - Php

If you're not concerned about the exact formatting however you do want something simple but without the line breaks of print_r you can also use json_encode($value) for a quick and simple formatted output. (note it works well on other data types too)

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

Solution 3 - Php

As an aside, I was in search to find the best way to implode an associative array but using my own seperators etc...

So I did this using PHP's array_walk() function to let me join an associative array into a list of parameters that could then be applied to a HTML tag....

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

Obviously, you could stick that in your own function somehow but it gives you an idea of how you can join an associative array using your own method. Hope that helps someone :)

Solution 4 - Php

One way is using print_r(array, true) and it will return string representation of array

Solution 5 - Php

This is my solution for example for an 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>

Solution 6 - Php

My solution:

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

Solution 7 - Php

What about this shorter, more transparent, yet more intuitive with 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"

Solution 8 - Php

A one-liner for creating string of HTML attributes (with quotes) from a simple array:

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

Example:

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

Solution 9 - Php

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

Solution 10 - Php

Use array_walk for this.

$arr = [
    "key"  => "value",
    "key2" => "value2",
];

array_walk($arr, function(&$value, $key) {
    $value = "{$key}: {$value}";
});

implode("<br/>", $arr)

Result

key: value<br/>key2: value2<br/>

Solution 11 - Php

This is the most basic version I can think of:

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}

Solution 12 - Php

echo implode(",", array_keys($companies->toArray()));

$companies->toArray() -- this is just in case if your $variable is an object, otherwise just pass $companies.

That's it!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmatpieView Question on Stackoverflow
Solution 1 - PhpGregView Answer on Stackoverflow
Solution 2 - PhpscunliffeView Answer on Stackoverflow
Solution 3 - PhpAdamView Answer on Stackoverflow
Solution 4 - Phpdino.kecoView Answer on Stackoverflow
Solution 5 - Phpuser4846194View Answer on Stackoverflow
Solution 6 - PhpkostikovmuView Answer on Stackoverflow
Solution 7 - PhpFantomX1View Answer on Stackoverflow
Solution 8 - PhpWackGetView Answer on Stackoverflow
Solution 9 - PhpSoftmixtView Answer on Stackoverflow
Solution 10 - PhpUniccoView Answer on Stackoverflow
Solution 11 - PhpJustinView Answer on Stackoverflow
Solution 12 - PhpHardik RavalView Answer on Stackoverflow