【问题标题】:How do I convert a string of an array to an array in PHP?如何在 PHP 中将数组的字符串转换为数组?
【发布时间】:2015-10-11 07:00:32
【问题描述】:

这似乎是一个简单的任务,但我一直无法找到一种方法来做到这一点。我有一个存储为这样的字符串的数据输出:

$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
)

一定是很容易被我忽略的东西。请帮忙。

【问题讨论】:

  • 我花了很多时间在这个网站上查看类似的问题,并查看 w3schools 和其他参考资料。我知道我必须忽略一些简单的东西,但找不到它。不只是-1票的东西将不胜感激。谢谢
  • 我看到这家伙也有类似的问题,但他是从数组开始的。我必须从字符串开始。 stackoverflow.com/questions/684553/…

标签: php arrays


【解决方案1】:

根据您从哪里获取字符串,您可以使用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 );

【讨论】:

  • 最后这句话很有启发性! “如果 eval() 是答案,那你几乎肯定问错了问题。” -- Rasmus Lerdorf,PHP 的 BDFL 再次感谢。
  • 对。 Bt 为了重新设计它,需要更多信息,如您的问题中所述!
  • 我明白了。我很欣赏你的谨慎。整个数据串来自一个在线表格。它在插入 sql 数据库之前已被清理和加密。我将它从数据库中提取出来,解密,然后尝试将这些信息用于其预期目的。无论如何,整个字符串都属于您的警告:“只要该字符串的内容可能直接或间接受到用户的影响”。我很高兴你引起了我的注意。谢谢!
【解决方案2】:

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

<?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>';

?>

【讨论】:

  • 感谢汤姆的回复。我收到以下错误:
  • 解析错误:语法错误,意外 '[' in: for the $arrData[] = explode( '%@@%', $val )[1];
  • 好的,得到编辑,它现在正在工作。非常感谢您的回复。我认为会有一种更简单的方法来做到这一点!
  • 谢谢汤姆,这正在我的程序中工作。我很高兴能摆脱困境!
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 2010-10-15
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多