【问题标题】:String to associative array字符串到关联数组
【发布时间】:2013-09-03 03:42:52
【问题描述】:

我无法使用preg_match_all 将字符串拆分为键值对。我的字符串示例:

"%Title:Movie%Sortable%Writer:%Indexed:false%"

我期望的结果如下:

$result['Title'] = 'Movie';
$result['Sortable'] = '';
$result['Writer'] = '';
$result['Indexed'] = 'false';

我可以使用preg_match('/%/',$str,-1,PREG_SPLIT_NO_EMPTY); 拆分字符串,但它会返回一个索引数组。我需要一个关联数组,这样顺序就不重要了,我可以在switch 语句中使用该键。在preg_match_all 中使用的正确正则表达式是什么?

【问题讨论】:

  • 在“%”上爆炸,然后循环遍历结果并在“:”上爆炸
  • @Dagon 谢谢。也许我对正则表达式匹配的考虑太多了。它现在正在工作。

标签: php regex arrays


【解决方案1】:

尝试:

$input  = "%Title:Movie%Sortable%Writer:%Indexed:false%";
$output = array();

$data = explode('%', $input);
foreach ($data as $item) {
  list($key, $value) = explode(':', $item);
  $output[$key] = $value;
}

【讨论】:

  • 我所做的唯一更改是使用NO_EMPTY 标志将explode 替换为preg_split
  • @Waldermort 使用非正则表达式解决方案要快得多。
【解决方案2】:
<?php
$arr = array();
$string = "%Title:Movie%Sortable%Writer:%Indexed:false%";
$d = explode('%', $string);

foreach($d as $item){
   list($key,$value) = explode(':', $item);
   $arr[$key] = $value;

}

print_r($arr);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2023-01-22
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多