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"
}
*/
?>
http_build_query
это лучший вариант здесь, так как у вас есть key=>value
комбинации
Используемый array_walk()
чтобы достичь цели
function myfunction($value, $key) {
echo $key . '="' . $value . '" ';
}
array_walk($atributes, "myfunction");