用键破坏关联数组的最快方法
-
03-07-2019 - |
题
我正在寻找一种将关联数组转换为字符串的快速方法。典型的结构就像一个URL查询字符串,但有可自定义的分隔符,所以我可以使用'& amp;
'表示xhtml链接,或者'&
'。
我的第一个倾向是使用 foreach
,但由于我的方法可以在一个请求中多次调用,我担心它可能太慢。
<?php
$Amp = $IsXhtml ? '&' : '&';
$Parameters = array('Action' => 'ShowList', 'Page' => '2');
$QueryString = '';
foreach ($Parameters as $Key => $Value)
$QueryString .= $Amp . $Key . '=' . $Value;
有更快的方法吗?
解决方案
您可以使用 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
的换行符,您还可以使用 json_encode($值)
用于快速简单的格式化输出。 (注意它也适用于其他数据类型)
$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]
这是我的解决方案,例如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>
一种方法是使用 print_r(array,true)
,它将返回数组的字符串表示
用于从简单数组创建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"
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) ;
使用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);
这是我能想到的最基本的版本:
public function implode_key($glue = "", $pieces = array())
{
$keys = array_keys($pieces);
return implode($glue, $keys);
}
echo implode(",", array_keys($companies->toArray()));
$ companies-&gt; toArray()
-
如果你的 $ variable
是一个对象,那么就是这种情况,否则只需传递$ companies。
就是这样!
不隶属于 StackOverflow