【问题标题】:alternative to eval('$array_test = array('.$test.');')替代 eval('$array_test = array('.$test.');')
【发布时间】:2013-11-19 13:41:57
【问题描述】:

我正在寻找替代方法

$test = "1=>'msg_test1',3=>'msg_test2',9=>'msg_test3'";
eval('$array_test = array('.$test.');');

有谁知道我怎样才能从字符串中以安全的方式拥有一个数组?

提前感谢您的帮助!

【问题讨论】:

  • 有什么理由不使用像 JSON(或 XML、SEN 或任何其他已知格式)这样的数据交换格式?
  • 如果 eval 是您的最佳选择,您可能做错了
  • 注意eval = evil :)
  • 可能是XY问题meta.stackexchange.com/questions/66377/what-is-the-xy-problem请告诉我们你想要达到什么效果。
  • $test 中缺少引号意味着它无效

标签: php arrays type-conversion eval


【解决方案1】:

您可以像这样使用explode() 手动解析它:

$test = "1=>'msg_test1,3=>'msg_test2,9=>'msg_test3'";

$array_test = array();
foreach(explode(',', substr($test, 0, -1)) as $row)
{
    $split = explode('=>\'', $row);
    $array_test[$split[0]] = $split[1];
}

var_dump($array_test);

生产:

array (size=3)
  1 => string 'msg_test1' (length=9)
  3 => string 'msg_test2' (length=9)
  9 => string 'msg_test3' (length=9)

【讨论】:

    【解决方案2】:

    如果我理解你的问题,那么你应该像这样格式化你的字符串

    $test = "value1,value2,value2";

    然后继续爆炸

    $array_test = explode(',', $test);

    你的数组

    $array_test = array(
        '1' => 'value1'
        '2' => 'value2'
        '3' => 'value3'
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2016-04-10
      • 1970-01-01
      相关资源
      最近更新 更多