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秒,如果字符串较大,情况可能会变得更糟。