首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -在数组中将字符串的每两部分组合在一起。

PHP -在数组中将字符串的每两部分组合在一起。
EN

Stack Overflow用户
提问于 2015-11-25 15:19:59
回答 5查看 108关注 0票数 0

我有一个很长的字符串,构造如下:

代码语言:javascript
复制
randomstring number     randomstring number     randomstring number

我需要将这些随机字符串和数字组合在一起,这样才能得到这样的数组:

代码语言:javascript
复制
array = [[randomstring, number], [[randomstring, number], [randomstring, number]]

我不知道字符串和数字之间有多少空格。有什么建议吗?

更新

既然埃德温·莫勒的回答,我现在就剩下这个数组了:

代码语言:javascript
复制
Array (46) {

[0] => 
array(2) {
  [0]=>
  string(20) "string"
  [1]=>
  string(7) "number"
}
[1]=>
array(2) {
  [0]=>
  string(5) ""
  [1]=>
  string(7) ""
}

[2] => 
array(2) {
  [0]=>
  string(10) ""
  [1]=>
  string(11) ""
}

[3] => 
array(2) {
  [0]=>
  string(10) ""
  [1]=>
  string(11) ""
}

[4] => 
array(2) {
  [0]=>
  string(10) ""
  [1]=>
  string(11) ""
}

需要删除具有2个空元素的数组元素。

我把它留给这个解决方案。它一点也不优雅,但我不知道这些‘空’字符串是什么。它不响应空格、空格和任何字符测试,所以我使用strlen()函数:

代码语言:javascript
复制
$str = preg_replace('!\s+!', ' ', $longstring);
$parts = explode(" ", $str);
$nr = count($parts);

for ($i = 0; $i < $nr; $i = $i + 2) {
    if(strlen($parts[$i]) > 20) { // ugly, but it works for now..
        $tmp[] = [$parts[$i], $parts[$i + 1]];
    }
}

// unsetting these elements because they are longer than 30
unset($tmp[0]);
unset($tmp[1]);
unset($tmp[2]);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-11-25 15:30:30

代码语言:javascript
复制
$longstring = "randomstring1 1001     randomstring2 205 randomstring3 58";
// First, take care of the multiple spaces.
$str = preg_replace('/\s+/', ' ', $longstring);

// split in parts on space
$parts = explode(" ",$str);
$nr = count($parts);

$tmp = array();
for ($i=0; $i<$nr; $i=$i+2){
  $tmp[] = array($parts[$i], $parts[$i+1]);
}


echo "<pre>";
print_r($tmp);
echo "</pre>";

你可能想确定它是偶数。(检查$nr)。

编辑: OP说数组$parts中有一些空元素。

我不知道这是什么原因,可能是一些编码问题,如果没有原始材料(字符串),我就不确定了。猜测:尝试对原始字符串进行utf8_decode,然后执行preg_replace,然后执行print_r。

代码语言:javascript
复制
$longstring = "randomstring1 1001     randomstring2 205 randomstring3 58";
$longstring = utf8_decode($longstring);
$str = preg_replace('/\s+/', ' ', $longstring);
$parts = explode(" ",$str);
echo "<pre>";
print_r($parts);
echo "</pre>";
票数 1
EN

Stack Overflow用户

发布于 2015-11-25 15:30:36

引爆绳子然后像这样检查它

在线演示

代码语言:javascript
复制
$str="randomstring number     randomstring number     randomstring number";
$exp=explode(" ",$str);
for($i=0;$i<count($exp);$i++)
{
    if(trim($exp[$i])=="")
        continue;
    $result[]=array(0=>$exp[$i],1=>$exp[$i+1]);
    $i++;
}
var_dump($result);
票数 1
EN

Stack Overflow用户

发布于 2015-11-25 15:30:39

尝试以下几点

代码语言:javascript
复制
//Our string
$string = "randomstring 11     randomstring 22     randomstring 33";

//Split them up if they have MORE THAN ONE space
$firstSplit = preg_split('/\s\s+/', $string);

//Set up a new array to contain them
$newArray = array();

//For each of the ones like "randomstring 11"
foreach($firstSplit as $key => $split){

    //Split them if they have ONE OR MORE space
    $secondSplit = preg_split('/\s+/', $split);

    //Add them to the array
    //Note: change this part to structure the array however you'd like
    $newArray[$key]["string"] = $secondSplit[0];
    $newArray[$key]["integer"] = $secondSplit[1];
}

这些评论应该很好地解释这里正在发生的事情,它将留给您以下内容:

代码语言:javascript
复制
array (size=3)
    0 => 
      array (size=2)
        'string' => string 'randomstring' (length=12)
        'integer' => string '11' (length=2)
    1 => 
      array (size=2)
        'string' => string 'randomstring' (length=12)
        'integer' => string '22' (length=2)
    2 => 
      array (size=2)
        'string' => string 'randomstring' (length=12)
        'integer' => string '33' (length=2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33920171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档