如何将两个分隔符上的字符串拆分为关联数组

时间:2013-06-25 15:50:32

标签: php arrays string

this question上的答案,指出了一个可能的方向,但它处理了一次字符串,然后遍历结果。有没有办法在一个过程中完成它?

我的字符串是这样的,但更长的时间:

954_adhesives
7_air fresheners
25_albums
236_stuffed_animial
819_antenna toppers
69_appliances
47_aprons
28_armbands

我想在换行符上拆分,然后在下划线上拆分,以便下划线前的数字是键,下划线后的短语是值。

4 个答案:

答案 0 :(得分:2)

只需使用正则表达式和array_combine

preg_match_all('/^([0-9]+)_(.*)$/m', $input, $matches);
$result = array_combine($matches[1], array_map('trim', $matches[2]));

Sample output

array(8) {
  [954]=>
  string(9) "adhesives"
  [7]=>
  string(14) "air fresheners"
  [25]=>
  string(6) "albums"
  [236]=>
  string(15) "stuffed_animial"
  [819]=>
  string(15) "antenna toppers"
  [69]=>
  string(10) "appliances"
  [47]=>
  string(6) "aprons"
  [28]=>
  string(8) "armbands"
}

如果您需要分别按键或值对结果进行排序,请使用ksortarsort

答案 1 :(得分:0)

编辑:

对于后代,这是我的解决方案。但是,@ Nils Keurentjes的答案更合适,因为它与开头的数字匹配。


如果您想使用正则表达式执行此操作,可以执行以下操作:

preg_match_all("/^(.*?)_(.*)$/m", $content, $matches);

应该做的伎俩。

答案 2 :(得分:0)

你可以在一行中完成: $result = preg_split('_|\n',$string);

这是一个方便的测试人员:http://www.fullonrobotchubby.co.uk/random/preg_tester/preg_tester.php

答案 3 :(得分:0)

如果您希望结果是这样的嵌套数组;

Array
(
    [0] => Array
        (
            [0] => 954
            [1] => adhesives
        )

    [1] => Array
        (
            [0] => 7
            [1] => air fresheners
        )

    [2] => Array
        (
            [0] => 25
            [1] => albums
        )

)

然后您可以使用array_map例如

$str =
"954_adhesives
7_air fresheners
25_albums";

$arr = array_map(
  function($s) {return explode('_', $s);},
  explode("\n", $str)
);

print_r($arr);

为了简洁起见,我刚刚使用了字符串的前三行,但是整个字符串的功能相同。