PHP数组以字符串作为参数

时间:2013-11-21 10:06:48

标签: php arrays implode

我想将数组值转换为字符串。我应该如何在目标中加入他们?

我应该使用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 个答案:

答案 0 :(得分:2)

如果你想确保你将获得完全相同的数组,你必须使用serialize(因为它将保留变量类型)和unserialize来获取数据。或者,json_decodejson_encode也可以工作(但只维护简单类型为int / float / string / boolean / NULL)。但是,数据将大于implodehttp_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

答案 1 :(得分:1)

http_build_query 是最佳选择,因为您有key=>value个组合

答案 2 :(得分:0)

看起来您希望将这些组合成一个字符串,以便在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);

P.S。 atributes应该有三个Ts - attributes - 介意这不会让你失望!

答案 3 :(得分:0)

使用array_walk()获得目标

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

array_walk($atributes, "myfunction");