最快的方法来爆炸键与关联数组

我正在寻找一种快速的方法来将一个关联数组转换为一个string。 典型的结构就像一个URL查询string,但带有可定制的分隔符,所以我可以使用' & '用于xhtml链接或' & ',否则。

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

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

有更快的方法吗?

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

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

顺便说一句,我正在寻找find一个关联数组,但使用我自己的分隔符等最好的方法…

所以我使用PHP的array_walk()函数做了这个,让我join一个关联数组到一个参数列表,然后可以应用到一个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 

很显然,你可以把它固定在你自己的函数中,但是它可以让你了解如何使用你自己的方法来join一个关联数组。 希望能帮助别人:)

如果你不关心确切的格式,但你确实想要简单的东西,但没有print_r换行符,你也可以使用json_encode($value)来获得一个快速简单的格式化输出。 ( 注意它也适用于其他数据types

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

一种方法是使用print_r(array, true) ,它将返回数组的string表示forms

这是我的解决scheme,例如一个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.comhttp://img.dovov.combest-of.jpg" alt=""> </div> 

这是我能想到的最基本的版本:

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

对于shell_exec,其中\ n是重要的,一个string应该包裹在“”被解释为一个单一的参数

function a2s($ar,$glue = "\\n"){ $rez="\""; foreach($ar as $k=>$v){ $rez.=$k."=".$v.$glue; } return $rez."\""; }

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

从一个简单的数组中创buildHTML属性string(带引号)的单线程:

 $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" 
 echo implode(",", array_keys($companies->toArray())); 

$companies->toArray() – 这是万一你的$variable是一个对象,否则只是传递$公司。

而已!