如何从字符串创建数组?

时间:2014-02-08 18:11:38

标签: php arrays string

我的字符串看起来像这样:

Array ( [0] => movies [1] => games [2] => art [3] => books [4] => cars [5] => business [6] => lifestyle )

我想从这个字符串中创建一个数组。我动态生成这个字符串,但我不知道这些值是什么。我从一个看起来像这样的数组中得到这个字符串:

Array ( [0] => Array (movies [0] => games [1] => art [2] => books [3] => cars [4] => business [5] => lifestyle )) 

我试图像这样提取嵌套数组:$interests = $_POST['interests'][0];(数组兴趣来自带复选框的表单)但是当我这样做时,它将嵌套数组视为字符串而不是数组。我知道这是因为我接下来使用in_array函数,它会抛出这个错误:

Warning: in_array() expects parameter 2 to be array, string given in /Application/...

我不知道为什么它将嵌套数组视为字符串,但确实如此。那么如何将字符串转换回数组呢。

* 更新:*

我的HTML看起来像这样:

<form action = 'signup.php?step=2' method='post'>
    <h3>Interests</h3>
    <div class="interest_chooser">
        <label><input type="checkbox" value="music" name="interest[]"> Music<br></label>
        <label><input type="checkbox" value="movies" name="interest[]"> Movies<br></label>
        <label><input type="checkbox" value="games" name="interest[]"> Games<br></label>
        <label><input type="checkbox" value="art" name="interest[]"> Art<br></label>
        <label><input type="checkbox" value="books" name="interest[]"> Books<br></label>
        <label><input type="checkbox" value="cars" name="interest[]"> Cars<br></label>
        <label><input type="checkbox" value="ideas" name="interest[]"> Ideas<br></label>
        <label><input type="checkbox" value="business" name="interest[]"> Business<br></label>
        <label><input type="checkbox" value="comedy" name="interest[]"> Comedy<br></label>
        <label><input type="checkbox" value="technology" name="interest[]"> Technology<br></label>
        <label><input type="checkbox" value="lifestyle" name="interest[]"> Lifestyle<br></label>
    </div>
    <input type = 'submit'>
</form>

我的signup.php?step = 2看起来像这样:

<form action = 'signup.php?step=3' method='post'>
    <input type="hidden" name="interests" value="<?php print_r($_POST['interest']); ?>">
    <!-- More Inputs that I will not show because they are irrelevant -->
    <input type='submit'>
</form>

我的signup.php?step = 3提交数据,我得到数组的部分如下:

$interests = $_POST['interests'][0];
if (in_array('music', $interests)) {
         $music = 'music';
} else {
         $music = 'no_val';
}

我执行了更多上述陈述。

1 个答案:

答案 0 :(得分:1)

正如Wrikken在评论print_r()中提到的那样是不可逆转的。因此,一旦使用print_r()回显它,该数组中的数据就无法重新填充回变量中。如果您的目标是将这些值放入表单中以供日后提交和处理,则需要选择 可逆的格式。有几种方法可以做到:

使用json_encode() / json_decode()

这会将您的数组转换为json格式(并再次返回):

$array = array('movies', 'games', 'art', 'books', 'cars', 'business', 'lifestyle' );
echo json_encode($array);
// output: ["movies","games","art","books","cars","business","lifestyle"]

// Reading back in
$array = json_decode($_POST['interests'], true);

使用serialize() / unserialize()

$array = array('movies', 'games', 'art', 'books', 'cars', 'business', 'lifestyle' );
echo serialize($array);
// output: a:7:{i:0;s:6:"movies";i:1;s:5:"games";i:2;s:3:"art";i:3;s:5:"books";i:4;s:4:"cars";i:5;s:8:"business";i:6;s:9:"lifestyle";}

// Reading back in
$array = unserialize($_POST['interests']);

使用逗号分隔的字符串与implode() / explode()

对于像您这样的非常基本的数据,只需将值放入以逗号分隔的字符串中也可以有效:

$array = array('movies', 'games', 'art', 'books', 'cars', 'business', 'lifestyle' );
echo serialize($array);
// output: movies,games,art,books,cars,business,lifestyle

// Reading back in
$array = explode($_POST['interests']);

但是,更好的解决方案是使用sessions。会话允许您从页面到页面传送数据,而无需将数据发送到客户端,只能发送回服务器。

第1页:

<?php
session_start();
$interests = array('movies', 'games', 'art', 'books', 'cars', 'business', 'lifestyle' );
$_SESSION['interests'] = $array;

第2页:

<?php
session_start();
$interests = $_SESSION['interests'];
print_r($interests);
// Output: Array ( [0] => movies [1] => games [2] => art [3] => books [4] => cars [5] => business [6] => lifestyle )