用键破坏关联数组的最快方法

mat*_*pie 112 php arrays associative-array implode query-string

我正在寻找一种快速的方法将关联数组转换为字符串.典型的结构类似于URL查询字符串,但具有可自定义的分隔符,因此我可以使用' &'用于xhtml链接或' &'.

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

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

有更快的方法吗?

Gre*_*reg 168

你可以http_build_query()用来做那件事.

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

  • 问题是`http_build_query`转义特殊字符 (9认同)
  • 它还编码特殊字符,因此这不是一个好选择 (5认同)
  • 我想知道这是否真的是解决一般问题的最快方法。该函数中正在进行一些编码。那么,如果不是 URL,这真的比 array_walk 更快吗?如果您不想对其进行编码怎么办? (2认同)

小智 33

顺便说一句,我一直在寻找破坏关联数组的最佳方法,但是使用我自己的分隔符......

所以我使用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
Run Code Online (Sandbox Code Playgroud)

显然,你可以在某种程度上坚持你自己的函数,但它让你了解如何使用自己的方法加入一个关联数组.希望有人帮助:)

  • 如果create_function的语法让任何人感到困惑,请参阅http://php.net/manual/en/function.create-function.php (6认同)

scu*_*ffe 30

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

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


小智 19

这是我的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>
Run Code Online (Sandbox Code Playgroud)


din*_*eco 18

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

  • 但是print_r格式的输出,而不是"key = value"与提供的分隔符连接. (2认同)

小智 9

我的解决方案:

$url_string = http_build_query($your_arr);
$res = urldecode($url_string); 
Run Code Online (Sandbox Code Playgroud)