【问题标题】:How to convert array string to array in php如何在php中将数组字符串转换为数组
【发布时间】:2010-07-23 09:43:10
【问题描述】:

我有一个字符串,它来自 js 使用 encodeURICompoent()。现在我想将此字符串转换为数组。我尽力解决这个问题。但我找不到任何解决方案来做到这一点。非常感谢任何帮助。

array string = 'array(0=>array("packid"=>22,"pverid"=>18,"yaml"=>"- url: /static
 static_dir: static

- url: .*
  script: provider.py" ),1=>array("packid"=>23,"pverid"=>19,"yaml"=>"- url: /static
  static_dir: static

- url: .*
  script: provider.py" ));';

谢谢你, 确定

【问题讨论】:

  • 你想从这些值中提取什么?您需要使用implode 将字符串转换为数组。
  • 完全不清楚你的字符串是什么。到目前为止,您已经说过字符串是 JSON.stringified,采用 YAML 格式、URL 编码和 PHP 数组格式。 这是什么?!这个问题无法回答。
  • 我想要的是,我正在从客户端获取 json 对象到 php,其中包含使用 javascript encodeURIComponent() 编码的数据字符串。如果它包含此数据,我无法使用 json_decode() 函数将此对象转换为数组。 jsonstring="{\"packid\":\"22\",\"pverid\":\"18\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20% 20static_dir%3A%20static%0A%0A-%20url%3A%20.*%0A%20%20script%3A%20provider.py\"},{\"packid\":\"23\",\"pverid \":\"19\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.*% 0A%20%20script%3A%20provider.py\"}" 谢谢
  • 为什么你将 JSON 与 YAML 与 PHP 数组混合在一起?

标签: php string arrays


【解决方案1】:

看起来eval 应该把这个字符串变成一个数组。
但是:你永远不应该使用eval,尤其是从外部来源获得的输入,因为它会引发一系列安全问题。相反,您应该手动解析字符串,但这会很麻烦。

您应该找到一种更好的方法来发送数组值,例如通过JSON。尤其是从 Javascript 发送值时,这是常用的方法。

【讨论】:

  • 在我看来不是那样的......看起来它充其量只会抛出异常。看起来字符串的一部分丢失了。
  • @no 我认为这些换行符是字符串的一部分。
  • 当我尝试看起来像这样时,它会引发解析错误。 $packs = eval($post["packs"]); print_r($packs);错误 ----------- 解析错误:语法错误,在第 9 行的 eval()'d 代码中出现意外的 $end
  • 我在客户端使用 JSON.stringify() jquery 插件方法来发送 json 数据。
【解决方案2】:

正如deceze所说,你可以使用eval()将这个字符串变成一个PHP数组,但是你是否应该是另一回事......

$myCodeString = 'array(0=>ar ...... etc.';  // Your coded string

eval('$myArray = '.$myCodeString);
var_dump($myArray);

至少返回一个有效的 PHP 数组:

array(2) {
  [0]=>
  array(3) {
    ["packid"]=>
    int(22)
    ["pverid"]=>
    int(18)
    ["yaml"]=>
    string(71) "- url: /static
 static_dir: static

- url: .*
  script: provider.py"
  }
  [1]=>
  array(3) {
    ["packid"]=>
    int(23)
    ["pverid"]=>
    int(19)
    ["yaml"]=>
    string(72) "- url: /static
  static_dir: static

- url: .*
  script: provider.py"
  }
}

您可能想要更多地解析您的“yaml”字段...?

【讨论】:

  • "你可以使用 eval()" 不要这样做。
  • 感谢您强调这一点,但我并不是说您应该这样做。关于这在技术上是否可行,似乎存在一些争论。
  • 这对我很有用。如果您无法控制数据,安全问题只是一个因素。在我的情况下,数组是自动生成的,并且只在内部公开。不必多疑。
【解决方案3】:

看看implode函数。

【讨论】:

  • implode 如何将 string 转换为 array
  • 它不会......他的意思是explode,可能。
  • explode 用于将分隔字符串转换为数组。 OP 中的编码字符串不是直接分隔的字符串。
【解决方案4】:

很难理解你在这里问什么。

您想将 yaml 字符串转换为 php 数组吗?如果是这样,请尝试spyc

【讨论】:

  • 是的,用户总是在客户端的 textarea 中提供 yaml 数据。我总是获取该 yaml 数据并将该确切的 yaml 数据(带有新行、空格...)存储在数据库中以供将来使用。你能给出一些解决这个问题的想法吗?
【解决方案5】:

使用serializejson 来传输数组会更容易。 (但在这种情况下,您需要在客户端使用一个小函数来序列化 / json_encode)

编辑:如果 encodeURIComponent 是你的问题,只需在 json_decode 之前执行 urldecode...

【讨论】:

  • 是的,我在客户端使用 JSON.stringify() 函数
【解决方案6】:

是的,我试过了,但它并没有解决我的问题。

我想要的是,我从客户端获取 json 对象到 php,其中包含使用 javascript encodeURIComponent() 编码的数据字符串。如果它包含此数据,我无法使用 json_decode() 函数将此对象转换为数组。

json string=packs="{\"packid\":\"22\",\"pverid\":\"18\",\"yaml\":\"-%20url%3A%20% 2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.%0A%20%20script%3A%20provider.py\"},{\"packid\":\ "23\",\"pverid\":\"19\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-% 20url%3A%20.%0A%20%20script%3A%20provider.py\"}"

谢谢你, 确定

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多