127

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

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

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

有更快的方法吗?

4

12 回答 12

187

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

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

于 2009-01-02T21:09:06.777 回答
39

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

$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]
于 2014-10-12T03:12:17.033 回答
34

顺便说一句,我正在寻找内爆关联数组的最佳方法,但使用我自己的分隔符等......

所以我使用 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

显然,您可以以某种方式将其保留在您自己的函数中,但它让您了解如何使用自己的方法加入关联数组。希望对某人有所帮助:)

于 2009-02-03T14:06:21.150 回答
21

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

于 2013-01-05T15:13:53.633 回答
20

这是我的解决方案,例如 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>
于 2015-04-29T11:41:20.383 回答
5

我的解决方案:

$url_string = http_build_query($your_arr);
$res = urldecode($url_string); 
于 2019-06-19T15:29:03.680 回答
2

用于从简单数组创建 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"
于 2017-04-27T18:30:22.377 回答
2

更短、更透明、更直观的 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"
于 2017-11-03T16:21:03.453 回答
1
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) ;
于 2015-07-28T10:25:08.310 回答
0

用于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/>
于 2022-03-03T11:29:01.937 回答
-2

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

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}
于 2011-03-18T02:49:33.153 回答
-3
echo implode(",", array_keys($companies->toArray()));

$companies->toArray()-- 这是以防万一你$variable是一个对象,否则只需传递 $companies。

就是这样!

于 2016-03-11T04:53:52.203 回答