2017-05-30 59 views
0

我需要转换一个PHP数组到HTML标签的属性,用空格和引号分隔的HTML标记属性,这是一个例子:转换PHP数组为由空格

$array=array(
    'attr1'=>'value1', 
    'id'=>'example', 
    'name'=>'john', 
    'class'=>'normal' 
); 

这是我需要达到的效果:

attr1="value1" id="example" name="john" class="normal" 

有什么PHP函数可以做到吗?

我想这些:

  • http_build_query
  • array_walk
+1

看看这个:HTTPS://stackoverflow.com/questions/11427398/how-to-implode-array-with-key-如何在PHP中使用key和value implode数组而不使用foreach-php – JustBaron

+1

可能的重复[如何在PHP中使用key和value implode而不使用foreach](https://stackoverflow.com/questions/11427398/how-to-implode-array- with-key-and-value-without-foreach-in-php) – Kempeth

回答

3

您也可以使用这个简单的一行代码,请follwo下面的代码::

$array=array(
    'attr1'=>'value1', 
    'id'=>'example', 
    'name'=>'john', 
    'class'=>'normal' 
); 
$data = str_replace("=", '="', http_build_query($array, null, '" ', PHP_QUERY_RFC3986)).'"'; 
echo $data; 

输出

attr1="value1" id="example" name="john" class="normal"

2

使用foreach循环获得的价值和关键。

$array = array(
    'attr1'=>'value1', 
    'id'=>'example', 
    'name'=>'john', 
    'class'=>'normal'); 

foreach ($array as $key => $value) { 
    echo $key . '="' . htmlspecialchars($value) . '" '; 
} 

如果你想使用一个函数,你可以使自己如下所示。

$array = array(
    'attr1'=>'value1', 
    'id'=>'example', 
    'name'=>'john', 
    'class'=>'normal'); 

echo buildTag($array); 

function buildTag ($array) { 
    $tag = ''; 
    foreach ($array as $key => $value) { 
    $tag .= $key . '="' . htmlspecialchars($value) . '" '; 
    } 
    return $tag; 
} 
+0

当然,假设键和值都是有效的HTML属性和值 - 也不需要转义(例如,值中的双引号'''会打破东西) – Paolo

+0

是的,你是完全正确的,但是,我正在根据假设,用户会正确使用这件作品 – jkys

0

我用下面的功能:

function buildAttributes($attributes) 
{ 
    if (empty($attributes)) 
     return ''; 
    if (!is_array($attributes)) 
     return $attributes; 

    $attributePairs = []; 
    foreach ($attributes as $key => $val) 
    { 
     if (is_int($key)) 
      $attributePairs[] = $val; 
     else 
     { 
      $val = htmlspecialchars($val, ENT_QUOTES); 
      $attributePairs[] = "{$key}=\"{$val}\""; 
     } 
    } 

    return join(' ', $attributePairs); 
} 

它正确地转义特殊的html字符并支持布尔属性(属性没有值)。下面输入:

[ 
    'name' => 'firstname', 
    'value' => 'My Name', 
    'required' 
] 

会产生:

name="firstname" value="My Name" required