这似乎是一项简单的任务,但我还没有找到办法做到这一点。我有一个数据输出存储为这样的字符串:
$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
)
我必须忽略一些非常容易的事情。请帮忙。
答案 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>';
?>