【问题标题】:array stored as string back into array?数组作为字符串存储回数组?
【发布时间】:2010-08-13 15:38:49
【问题描述】:

只是尝试在数据库条目中为管理员添加一些设置。

我已经保存了;

array('aviva'=>'aviva','teacher'=>'teacher');

进入“fullPara”字段,但似乎无法将其重新放入数组中?只是把它作为一个字符串吐出来,我试过 eval 但不知道从哪里开始?

echo $userTypes['fullPara']; // spits out array('aviva'=>'aviva','teacher'=>'teacher');

欢迎指点!

最好的,丹

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    您想查看 PHP 提供的 serialize()unserialize() 函数。

    这是一个例子:

    $array = array('1', '3', '4');
    $s_array = serialize($array);
    // insert that into the db.
    
    
    // later on when fetching.
    $array = unserialize($array_from_db); 
    print_r($array); // viola
    

    编辑

    我不建议这样做,但这是使用 eval 将其转换为数组的方法:

    eval("\$array = " . $data_from_Db);
    print_r($array);
    

    应该得到你想要的。

    【讨论】:

    • 可能是存储数组最简单的方法。但是,它几乎不可读,所以让 PHP 处理编辑它(即:不要尝试使用 phpMyAdmin “修复”某些东西)。
    • 嘿premiso - 问题是数组字符串已经作为数组存在('aviva'=>'aviva','teacher'=>'teacher');基本上我们会将它们添加到 phpmyadmin、seqlpro 等中。
    • @daniel:Ewwww。作为数组可以轻松检索的唯一方法是使用eval——然后你就会对各种废话敞开心扉。
    • 不好的做法。你真的应该把它转换成序列化。要取回它,我知道如何尝试并使用此功能 php.net/manual/en/function.print-r.php#93529 ,创建自己的例程或使用 eval 的唯一方法,鉴于它,我将高度不推荐使用 eval如果将错误/未经检查的数据传递给系统,可能会对您的系统造成潜在危害。最好将您的项目转换为使用 PHP 提供的正确方法。
    【解决方案2】:

    如果你已经有一个字符串 "array('aviva'=>'aviva','teacher'=>'teacher'); 并且你想把它变成一个数组,这应该可以...

    $str = "array('aviva'=>'aviva','teacher'=>'teacher');"; 
    eval("\$foo = $str");
    var_dump($foo);
    

    但这确实不是最好的方法。

    【讨论】:

    • 干杯 cags - 这行得通。只是想知道为什么它不是最好的方法?只是所有数组已经作为字符串存在于数据库中,因此需要一些时间来构建一个在插入时索引的管理员......
    • 既然它们已经以字符串的形式存在,那么真的没有很好的解决方法。但在您的服务器上运行 eval 会带来巨大的安全风险。我想如果您从不允许从应用程序对数据库进行写访问,这将受到限制。将来如果您希望将数组存储在数据库中,我强烈建议您使用 premiso 中提到的序列化。
    猜你喜欢
    • 2017-10-06
    • 2020-03-26
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多