用钥匙把关联数组炸开的最快方法

我在找一种快速把关联数组变成绳子的方法。典型的结构类似于 URL 查询字符串,但带有可定制的分隔符,因此我可以对 xhtml 链接使用‘ &’,否则使用‘ &’。

我的第一个倾向是使用 foreach,但是由于我的方法可以在一个请求中被多次调用,我担心它可能太慢了。

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

有更快的方法吗?

207090 次浏览

您可以使用 http_build_query()来做到这一点。

从提供的关联(或索引)数组生成 URL 编码的查询字符串。

顺便说一句,我一直在寻找内爆关联数组的最佳方法,但是使用了我自己的分离器等等。.

因此,我使用 PHP 的 array _ walk ()函数将一个关联数组加入到一个参数列表中,然后将这些参数应用到一个 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

很明显,你可以把它固定在你自己的函数中,但是它给了你一个如何使用你自己的方法加入一个关联数组的想法。 希望对某人有所帮助:)

一种方法是使用 print_r(array, true),它将返回数组的字符串表示形式

如果你不关心的 一模一样格式,但你确实想要一些简单的东西,但没有 print_r的换行符,你也可以使用 json_encode($value)快速和简单的格式化输出。(注意,它在其他数据类型上也能很好地工作)

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

下面是我对 div data-properties 的解决方案:

<?


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

用于从简单数组创建 HTML 属性字符串(带引号)的一行程序:

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

例如:

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

这个更短、更透明、更直观的 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"

我的解决办法是:

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

使用 array_walk

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


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


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

结果

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