【问题标题】:Convert a PHP string array into an Array object将 PHP 字符串数组转换为 Array 对象
【发布时间】:2025-12-14 03:30:02
【问题描述】:

我正在开发一个 PHP 应用程序,但在将字符串数组转换为对象数组时遇到了问题。我试图通过使用 (array) 强制将我的字符串转换为数组,但它不起作用。这是我的字符串(调试):

string '['method'=>'post','action'=>'#']' (length=32)

如您所见,它是一个完美的数组到字符串,我想将该字符串转换。

我的问题很简单,PHP 有直接将字符串转换为数组的功能(我认为没有)还是我必须使用explode 来转换我的字符串?

【问题讨论】:

  • 你如何/从哪里得到这个字符串?
  • 说真的,如果您需要这样做,我会考虑更改您的应用程序中的某些内容。

标签: php arrays string


【解决方案1】:

从 php 5.4 你可以简单地评估: eval("\$f=['method'=>'post','action'=>'#'];"); var_dump($f);

对于老年人,您必须稍微修复字符串,将第一个“[”更改为“array(”,最后一个“]”更改为“)”。

问题与How to create an array from output of var_dump in PHP?有点重复

【讨论】:

  • 感谢您快速正确的回复!我忘记了那个 eval 函数;)
  • 谨慎使用 eval 虽然从不将它用于用户输入;)
【解决方案2】:

这是定义数组的方法。 但是在写代码之前,请看看manuels

$arrayName = array('method' => 'post', 'action' => '#');

输出将读取

array (size=2)
  'method' => string 'post' (length=4)
  'action' => string '#' (length=1)

【讨论】:

    【解决方案3】:

    您可以使用preg_splitforeach() 来完成这项工作:

    $str = "['method'=>'post','action'=>'#']";
    
    $splitArray = preg_split("/[,']+/", $str);
    foreach ($splitArray as $k => $val) {
      if ($val == '=>') {
        $newArr[$splitArray[$k - 1]] =  $splitArray[$k + 1];
      }
    }
    
    var_dump($newArr);
    /*newArr
    Array
    (
      [method] => post
      [action] => #
    )*/
    

    【讨论】: