22

ワークフローを少し高速化するために基本的なフォーム構築クラスを構築しています。次のような属性の配列を取得できるようにしたいと考えています。

$attributes = array(
   "type"         => "text",
   "id"           => "contact-name",
   "name"         => "contact-name",
   "required"     => true
);

それを html 要素の属性にマップします。

<input type="text" id="contact-name" name="contact-name" required />

編集:

上記を達成する最もクリーンな方法は何ですか?ループといくつかの連結を組み合わせて何かをまとめることができると確信していますが、 printf などを使用すると、よりエレガントな方法でそれを行うことができるように感じます。

4

12 に答える 12

25

私はこれがそれを行うべきだと思います:

$result = '<input '.join(' ', array_map(function($key) use ($attributes)
{
   if(is_bool($attributes[$key]))
   {
      return $attributes[$key]?$key:'';
   }
   return $key.'="'.$attributes[$key].'"';
}, array_keys($attributes))).' />';
于 2013-08-06T13:35:07.330 に答える
12
$attr = array(
    'type'     => 'text',
    'id'       => 'contact-name',
    'name'     => 'contact-name',
    'required' => true,
    'value'    => '" <b>html</b> \'test\''
);

echo '<input '. implode(' ', array_map(
    function ($k, $v) { return $k .'="'. htmlspecialchars($v) .'"'; },
    array_keys($attr), $attr
)) .' />';
于 2015-12-03T10:39:50.477 に答える
3
$output = '<input ';

foreach ($attributes as $name => $value) {
    if (is_bool($value)) {
        if ($value) $output .= $name . ' ';
    } else {
        $output .= sprintf('%s="%s"', $name, $value);
    }
}

$output .= '>';

XHTML の変更について

    if ($value) $output .= $name . ' ';

    if ($value) $output .= sprintf('%s="%s"', $name, $name);

    $output .= '>';

    $output .= '/>';
于 2013-11-16T07:03:27.467 に答える
1
$input_attrs = array(
    'type' => 'text',
    'placeholder' => 'Placeholder',
    'value' => 'the value'
);

//Use & for modify current item in array
array_walk($input_attrs, function (&$item, $key) {
    $item =  $key . '="' . $item . '"';
});

$input = '<input '. implode(' ', $input_attrs) .' />';    
于 2019-02-26T19:02:25.870 に答える