2009-01-02 55 views
93

我正在尋找一種將關聯數組轉換爲字符串的快速方法。典型的結構就像一個URL查詢字符串,但帶有可定製的分隔符,所以我可以使用'&'作爲xhtml鏈接,否則使用'&'。用關鍵碼爆破關聯數組的最快方法

我的第一個傾向是使用foreach但由於我的方法可以在一個請求中多次調用,所以我擔心它可能太慢。

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

有沒有更快的方法?

+4

如果你輸出HTML別忘了,正確的語法是& not&,iow這是錯的JOE是的,它的工作原理,但它是無效的HTML。 – TravisO 2009-01-06 18:21:12

回答

143

您可以使用http_build_query()來做到這一點。

生成從締合(或索引)陣列提供的URL編碼的查詢串。

+0

正試圖在PHP API中找到這個方法,這絕對是一種方法。如果不是替代方案是使用修改後的implode方法,例如http://uk2.php.net/manual/en/function.implode.php#84684,但http_build_query()會更快。 – 2009-01-02 21:11:44

+0

我不知道這是否真的是一般問題的最快方式。這個函數中有一些編碼正在進行。所以,如果它不是一個URL,這是否比array_walk更快,以及如果你不想編碼? – 2014-01-31 23:12:52

+5

問題是'http_build_query`轉義特殊字符 – Sisyphus 2015-02-09 15:42:46

32

順便說一句,我是在搜索,尋找到爆的關聯數組,但用自己的分隔符等的最佳方式...

所以,我沒有這個使用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 

顯然,你可以堅持在自己的函數莫名其妙,但它給你的,你怎麼能一個想法使用你自己的方法加入一個關聯數組。 希望幫助別人:)

-1

這是最基本的版本,我能想到的:

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

一種方法是使用print_r(array, true),它將返回數組

22

如果你的字符串表示不關心確切的格式,但是您確實想要一些簡單但沒有print_r的換行符,您還可以使用json_encode($value)來獲得快速簡單的格式化輸出。 (注它的工作原理以及對其他數據類型也

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

這是我的,例如解決方案的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> 
0
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) ; 
-3
echo implode(",", array_keys($companies->toArray())); 

$companies->toArray() - 這僅僅是假如你的$variable是一個對象,否則只是通過$公司。

就是這樣!

0

一個班輪爲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" 
0

什麼有關此短,更透明,還更直觀與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"