【问题标题】:how to get strings from curly brackets?如何从大括号中获取字符串?
【发布时间】:2011-12-11 16:41:15
【问题描述】:

我需要帮助: 我有一个数组,我需要从中获取值...但是如何获取大括号内的数据...

它应该是简单的,我想......我尝试了爆炸,这显然不能像我在最后一个大括号中那样工作,例如在最后一个带有两种数据的大括号中,应该这样区分......每个大括号 (数据适用于某物)。

$array = array(
  "other" => "{name:2},{value:2},{align:4},{height:4, color:red}",
  "another" => "{name:2},{value:2},{align:4},{height:4, color:red}"
);

我真的很挣扎……感谢您的帮助。 谢谢

【问题讨论】:

  • 格式类似于json,但应该按照上面的形式处理...所以我认为{}中的所有数据都应该从这个字符串中提取出来,然后用','将它们分解
  • 如果 preg_match 不在括号内,使用逗号作为分隔符怎么办?但我不知道该怎么做......
  • 担心: 如何让你的答案都有效 - @Tim 和 D. Rattansingh?
  • @D. Rattansingh 我想让你和蒂姆的回答被接受......只是不知道如何

标签: php arrays string


【解决方案1】:
preg_match_all('/\{([^}]*)\}/', $str, $matches);
foreach($matches[1] as $match)
{
    $pieces = explode(',', $match);
    foreach($pieces as $pair)
    {
        list($key, $value) = explode(':', trim($pair));
        // do something with $key and $value
    }
}

【讨论】:

  • 您可能想确切地解释它的作用。
  • 是的,我试过这个......但我在想我错过了什么,也许还有另一种方法......
  • 我更同意haynars 的回答,因为给出的例子是JSON 编码的,所以你应该使用json_decode(...)
  • 其他问题:我想我需要得到一个用逗号分隔的值数组......然后用 preg_match_all 来做(这在我的情况下不起作用)
  • 蒂姆,非常感谢你 - 它适用于 D. Rattansingh 的代码......而且非常完美。
【解决方案2】:

相反,我认为explode 会完美运行。分解成单独的字符串,然后为每个字符串从索引 1 检索到索引 [arraylength-1],因为索引 0 包含 { 并且最后一个索引包含 }。

$str = substr($str, 1, strlen($str)-1);

所以对于从索引 1 到 last_index-1 截取的每个字符串。

编辑:

在您进行第一次爆炸后(这会将其切成 2 个大块):块 1 和块 2

foreach chunk array $pieces=explode(",",$chunk1); // 或块 2(这将进一步将碎片切割成由 , 分隔的字符串)

$str = substr($pieces, 1, strlen($pieces)-1);

然后对于每个 $piece,检索其间的内容。 (伪代码)

【讨论】:

  • 抱歉,它不能 :S explode 工作正常 - 但会提取用逗号分隔的所有数据,这是不行的,因为在花括号内用逗号分隔的值仍然必须以某种方式一起处理跨度>
  • 在你进行第一次爆炸后(这会将其切成 2 个大块),单独取出碎片(即一次一个块)并进行另一次爆炸:$pieces=explode("," ,$strPiece); (这将进一步将片段切割成由 , 分隔的字符串)然后对于每个 $piece,使用我上面给出的代码并检索其间的内容。
  • 请注意我为上面写了伪代码,但它给出了想法
  • 噢噢噢!非常感谢...真的有效.. 我之前试过,也许我做错了什么,当我得到数据拆分时,我可以使用 Tim 的代码从 {} THANKS 中提取所有内容!
  • 嘿,检查我的答案是否正确。自从我来过这里,从来没有人这样做过
【解决方案3】:

试试这个,了解json_decodejson_encode 功能

$result = json_decode('['.$array['other'].']', true);

更新

尝试此操作后,我注意到您的字符串不是有效的 JSON,因此在您获得 {"key":"value"} 格式之前我的答案不是一个好的解决方案

【讨论】:

  • {name:2} 是有效的 JSON 吗?不需要{'name':2}吗?我可能是错的,或者 PHP 可能对此很放松。
  • {name: 2} 不是无效的,但是{color: red} 确实是无效的,我才注意到现在
  • {name: 2} 也是无效的。见example #3
  • 我同意 - 它是 json 格式,我在我的一个版本中做过,但我应该把它当作常规数组......因为如果我把所有东西都放在 json 格式中,据说对我来说这太复杂了......
  • 所以如果你能得到{"key":"value"}的格式,你的目标就可以用json_decode轻松实现
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2011-11-04
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多