this question上的答案,指出了一个可能的方向,但它处理了一次字符串,然后遍历结果。有没有办法在一个过程中完成它?
我的字符串是这样的,但更长的时间:
954_adhesives 7_air fresheners 25_albums 236_stuffed_animial 819_antenna toppers 69_appliances 47_aprons 28_armbands
我想在换行符上拆分,然后在下划线上拆分,以便下划线前的数字是键,下划线后的短语是值。
答案 0 :(得分: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"
}
答案 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);
为了简洁起见,我刚刚使用了字符串的前三行,但是整个字符串的功能相同。