PHP массив в строку в качестве параметров

Я хочу преобразовать значения массива в строку. Что я должен использовать, чтобы присоединиться к ним, как указано в цели?

Должен ли я использовать serialize() или же implode() или же http_build_query() или жеarray_walk()?

$attributes = array(
    'autocomplete' => 'off',
    'class' => 'email',
    'id' => 'myform'
);

echo http_build_query($attributes, '', '" ');

// output
autocomplete=off" class=email" id=myform

Цель:

// output 
autocomplete="off" class="email" id="myform"

Редактировать:

я использовал array_walk() чтобы достичь цели

function myfunction($value, $key) {
    echo $key . '=" ' . $value . ' " ';
}

array_walk($atributes, "myfunction");

4 ответа

Решение

Похоже, вы хотите объединить их в строку для вывода на HTML-тег.

Эта многоразовая функция должна дать желаемый результат:

function get_attribute_string($attr_array) {
    $attributes_processed = array();
    foreach($attr_array as $key => $value) {
        $attributes_processed[] = $key . '="' . $value . '"';
    }

    return implode($attributes_processed, ' ');
}

$atributes = array(
    'autocomplete' => 'off',
    'class' => 'email',
    'id' => 'myform'
);

// this string will contain your goal output
$attributes_string = get_attribute_string($atributes);

PS atributes должно быть три Ц - attributes - учти, это тебя не поймает!

Если вы хотите убедиться, что вы получите точно такой же массив обратно, вы должны использовать serialize (так как он будет хранить типы переменных) и unserialize чтобы вернуть ваши данные. С другой стороны, json_decode а также json_encode работать также (но поддерживает только простые типы как int/float/string/boolean/NULL). Данные будут больше чем implode а также http_build_query, хоть.

Примеры:

Рассмотрим следующий массив:

$array = array(
    'foo' => 'bar',
    'bar' => false,
    'rab' => null,
    'oof' => 123.45
);

serialize / unserialize:

<?php
    var_dump( unserialize( serialize($array) ) );
    /*
        array(4) {
            ["foo"] => string(3) "bar"
            ["bar"] => bool(false)
            ["rab"] => NULL
            ["oof"] => float(123.45)
        }
    */
?>

implode / explode:

<?php
    var_dump( explode('&', implode('&', $array) ) );
    /*
        array(4) {
            [0] => string(3) "bar"
            [1] => string(0) ""
            [2] => string(0) ""
            [3] => string(6) "123.45"
        }
    */
?>

json_encode / json_decode:

<?php
    var_dump( json_decode( json_encode($array) , true) );
    /*
        array(4) {
            ["foo"] => string(3) "bar"
            ["bar"] => bool(false)
            ["rab"] => NULL
            ["oof"] => float(123.45)
        }
    */
?>

http_build_query / parse_str:

<?php
    parse_str( http_build_query($array) , $params);
    var_dump( $params );
    /*
        array(3) {
            ["foo"] => string(3) "bar"
            ["bar"] => string(1) "0"
            ["oof"] => string(6) "123.45"
        }
    */
?>

DEMO

http_build_query это лучший вариант здесь, так как у вас есть key=>value комбинации

Используемый array_walk() чтобы достичь цели

function myfunction($value, $key) {
    echo $key . '="' . $value . '" ';
}

array_walk($atributes, "myfunction");
Другие вопросы по тегам