将带数字的长字符串转换为数组

时间:2017-06-12 14:58:22

标签: php arrays regex explode preg-split

我正在寻找一种方法将类似1 hello there 6 foo 37 bar的字符串转换为类似的数组:

Array ( [1] => "hello there",
        [6] => "foo",
        [37] => "bar" )

每个数字都是它后面的字符串的索引。我想得到它的帮助。谢谢! :)

3 个答案:

答案 0 :(得分:6)

使用preg_match_allarray_combine函数的解决方案:

$str = '1 hello there 6 foo 37 bar';
preg_match_all('/(\d+) +(\D*[^\s\d])/', $str, $m);
$result = array_combine($m[1], $m[2]);

print_r($result);

输出:

Array
(
    [1] => hello there 
    [6] => foo 
    [37] => bar
)

答案 1 :(得分:1)

这应该有效,你将把数组放在$ out上。也许你应该考虑使用正则表达式。

$str = '1 hello there 6 foo 37 bar';
$temp = explode(' ', $str);
$out = [];
$key = -1;

foreach ($temp as $word) {
    if (is_numeric($word)) {
        $key = $word;
        $out[$key] = '';
    } else if ($key != -1) {
        $out[$key] .= $word . ' ';
    }
}

答案 2 :(得分:0)

您可以使用正则表达式live demo

<?php

$string = '1 hello there 6 foo 37 bar';
preg_match_all('/([\d]+)[\s]+([\D]+)/', $string, $matches);
print_r(array_combine($matches[1], $matches[2]));