如何在PHP中将数组的字符串转换为数组?

时间:2015-10-11 07:00:32

标签: php arrays

这似乎是一项简单的任务,但我还没有找到办法做到这一点。我有一个数据输出存储为这样的字符串:

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')";

我只需将其转换为此数组:

$arrData = array('first' => "$first", 'middle' => "$middle", 'last' => "$last");

我能得到的最接近的是下面显示的print_r结果:

$Data = explode(',', $rawData);

Array
(
    [0] => 'first' => '$first'
    [1] =>  'middle' => '$middle'
    [2] =>  'last' => '$last'
)

我需要的是:

Array
(
    [first] => $first
    [middle] => $middle
    [last] => $last
)

我必须忽略一些非常容易的事情。请帮忙。

2 个答案:

答案 0 :(得分:2)

根据您从中获取字符串的位置,您可以使用eval。强烈建议不要使用此函数,只要该字符串的内容可能受到用户的直接或间接影响,请参阅http://php.net/manual/en/function.eval.php提示。它必须包含有效的PHP语法,因此必须将其放入try / catch块中:

$evalArray = false;
$first = 'a';
$middle = 'b';
$last = 'c';

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')";

try {
    $evalArray = eval($rawData);
} catch ( $e )
{
    echo "parsing failed " . $e
}

print_r($evalArray );

答案 1 :(得分:1)

这就是你想要的(我认为),即使它不漂亮

<?php

$arr = array();
$first = 'one';
$middle = 'two';
$last = 'three';

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')";

$arrData = explode( ',', ( str_replace( array( 'array(\'', '=>', '\')', '\'' ), array( '', '%@@%', '', '' ), $rawData ) ) );

foreach( $arrData as $val ) {
  $v = explode( '%@@%', $val );
  $arr[trim($v[0])] = trim($v[1]);
}

echo '<pre>' . print_r( $arr, true ) . '</pre>';

?>