Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将带有数字的长字符串转换为数组_Php_Arrays_Regex_Explode_Preg Split - Fatal编程技术网

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

Php 将带有数字的长字符串转换为数组,php,arrays,regex,explode,preg-split,Php,Arrays,Regex,Explode,Preg Split,我正在寻找一种方法,将字符串(如1hello there 6foo 37 bar)转换为数组(如: Array ( [1] => "hello there", [6] => "foo", [37] => "bar" ) 每个数字都是其后字符串的索引。我很想得到你的帮助。谢谢!:) 这应该行得通,您将拥有$out上的数组。也许你应该考虑使用正则表达式。< /P> $str = '1 hello there 6 foo 37 bar'; $temp

我正在寻找一种方法,将字符串(如
1hello there 6foo 37 bar)转换为数组(如:

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

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

这应该行得通,您将拥有$out上的数组。也许你应该考虑使用正则表达式。< /P>
$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 . ' ';
    }
}

这应该是可行的,您将在$out上创建数组。也许你应该考虑使用正则表达式。< /P>
$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 . ' ';
    }
}

使用
preg\u match\u all
array\u组合功能的解决方案:

$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
)

使用
preg\u match\u all
array\u组合功能的解决方案:

$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
)
您可以使用regex

您可以使用正则表达式



首先,我想先看看您的方法,以及您遇到的特定问题的具体问题。第二,在空格上循环,然后使用许多方法中的一种。数字是唯一的,还是有重复?@n3wb数字是唯一的。domdom,我想用preg_split()做点什么,但我无法让它工作,所以我没有在这里发布。请检查。但是,您需要小心:如果您的一个字符串实际上包含一个数字怎么办?我想知道输入字符串最初是如何产生的。首先,我想先看看你的方法,以及关于你遇到的特定问题的特定问题。第二,在空格上循环,然后使用许多方法中的一种。数字是唯一的,还是有重复?@n3wb数字是唯一的。domdom,我想用preg_split()做点什么,但我无法让它工作,所以我没有在这里发布。请检查。但是,您需要小心:如果您的一个字符串实际上包含一个数字怎么办?我想知道输入字符串最初是如何产生的。现在已经有了,也许你想指出你的(即regex)是如何不同(更好?)的,你的答案与我的主要不同之处是什么?剽窃?@RomanPerekhrest我不想和你争论。我发誓在粘贴我的代码之前我没有看过你的代码。只有preg_match_all()可以执行正则表达式。你怎么说剽窃?@Krisrowe,即使不是剽窃——你在概念上迟发了同样的方法不仅答案迟了,而且空间处理不如Roman的模式。对结果执行var_export(),并查看两个元素有一个尾随空格。可能已经有了,您想指出您的(即正则表达式)是如何不同的(更好?),以及您的答案与我的主要不同之处?剽窃?@RomanPerekhrest我不想和你争论。我发誓在粘贴我的代码之前我没有看过你的代码。只有preg_match_all()可以执行正则表达式。你怎么说剽窃?@Krisrowe,即使不是剽窃——你在概念上迟发了同样的方法不仅答案迟了,而且空间处理不如Roman的模式。对结果执行var_export(),并查看两个元素是否有尾随空格。重要的是要注意,正则表达式的使用速度往往较慢,尽管代码较少,但性能较低。在这种情况下,我打算使用手动操作字符串,在更复杂的情况下使用正则表达式。我的解决方案花费了0.012秒,如果字符串较大,情况可能会变得更糟。需要注意的是,正则表达式的使用速度往往较慢,尽管代码较少,但性能较低。在这种情况下,我打算使用手动操作字符串,在更复杂的情况下使用正则表达式。我的解决方案花费了0.012秒,如果字符串较大,情况可能会变得更糟。