-1

这个问题的答案为我指明了一个可能的方向,但它处理了一次字符串,然后循环遍历结果。有没有办法在一个过程中做到这一点?

我的字符串是这样的,但要长得多:

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

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

4

4 回答 4

2

只需使用正则表达式和array_combine

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

样本输出

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"
}

如果您还需要按键或值对结果进行排序,请使用ksortor 。arsort

于 2013-06-25T15:56:23.280 回答
0

编辑:

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


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

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

应该做的伎俩。

于 2013-06-25T15:53:05.060 回答
0

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

这是一个方便的花花公子测试仪:http ://www.fullonrobotchubby.co.uk/random/preg_tester/preg_tester.php

于 2013-06-25T15:55:02.617 回答
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);

为了简洁起见,我刚刚使用了字符串的前三行,但相同的函数在整个字符串上都可以正常工作。

于 2013-06-25T16:10:18.220 回答