0

我正在使用一个 API,它向我发送一串信息,由未定义数量的空格分隔。当我尝试爆炸它时,我最终会得到一些仅由空格组成的元素。我已经尝试使用foreach, preg_replace, preg_match, 几乎所有我能找到的东西来摆脱这些空格,但仍然有一些剩余,奇怪的是,即使我用另一个符号替换这些空格然后分解字符串并删除仅由该符号组成的元素,仅保留空间元素。此外,任何删除它们的方法都会删除一些,但通常在每个包含有用信息的数组位置之间保留 2 或 3 个。

示例:我收到一个看起来像这样的字符串(我使用 // 来分隔元素):

// // // // // // // // // //1000 // // // // // // // // // // // //0 // // // // // // // //1 // // // // // // //1 // // // //101 // // // // // / / // //272 // // // // // // //ubuntu-10.04-x86 // // // //基本 // // // // // // // //true // // // //正在运行 // // // //0 // // // // // // // // // // // //1000 // // // // // // // // // // //0 // // // // // // //1 // // // // // // // //2 // // //102 // // // // // // //272 // // // // // // // //ubuntu-10.04 -x86 // // // //基本 // // // // // // //true // // // //运行 // // // //0 // // // // // // // // // // // //1000 // // // // // // // // // // // //0 // // // // // // // //1 // // // // // // // //3 // // // //103 // // // // // / / // //0 // // // // // // // //ubuntu-10。04-x86 // // // //vswap-256m // // // // // // //false // // // // 停止 // // // // // // //

当我做

$result  = preg_replace('/\s[\s]+/', '-', $result);
$result = preg_split('~-~', $result, -1, PREG_SPLIT_NO_EMPTY);

foreach($result as $item){
    echo "$item //";
}

例如,我最终得到了这个:

// // //1000 // // //0 // //1 // //1 //101 // //272 // //ubuntu //10.04 //x86 //基本 // // true //正在运行 //0 // // // //1000 // // //0 // //1 // //2 //102 // //272 // //ubuntu //10.04 / /x86 //基本 // //true //正在运行 //0 // // // //1000 // // //0 // //1 // //3 //103 // //0 // //ubuntu //10.04 //x86 //vswap //256m // //false //停止 // // //

任何人都知道我怎样才能摆脱数组中的那些空元素?

4

5 回答 5

3

您可以使用array_filter根据您自己的条件过滤掉元素。

$result = array_filter($result,
                       function($e) { return trim($e) != ''; });
于 2012-05-21T12:10:45.090 回答
1

我可能在这里遗漏了一些东西,但你不能:

$array = preg_split('/\s\s+/', $input, 0, PREG_SPLIT_NO_EMPTY);

?

像这样

于 2012-05-21T12:13:30.027 回答
0

首先删除空元素:

$str = preg_replace('%//\s+%', '', $str);

这会//<space>从字符串中删除

这里的例子

于 2012-05-21T12:12:55.950 回答
0

尝试

$match = array();
preg_match_all ( '/[^\s]+/' , $result, $matches);
print_r($match);
于 2012-05-21T12:15:06.920 回答
0
// Where $str is the crazy string.    
$fixed = preg_replace('/\s/', '', $str);
$result = preg_split('~//~', $fixed, -1, PREG_SPLIT_NO_EMPTY);
var_export($result);
于 2012-05-21T12:32:27.897 回答