0

定義されていない数のスペースで区切られた情報の文字列を送信する API を使用しています。分解してみると、スペースだけで構成された要素がいくつかできてしまいます。foreachpreg_replacepreg_match、これらのスペースを取り除くために見つけることができるほとんどすべてを使用してみましたが、まだいくつか残っています。奇妙なことに、これらのスペースを別の記号に置き換えてから文字列を分解して削除しても、この記号のみで構成された要素、スペースのみの要素が残ります。また、それらを削除するどの方法でも一部は削除されますが、通常、有用な情報を含む各配列位置の間に 2 つまたは 3 つ残っています。

例: 次のような文字列を受け取りました (要素を区切るために // を使用しています):

// // // // // // // // // //10000 // // // // // // // //1 // // // // // // // //1 // // // //101 // // // // // / / // //272 // // // // // // // //ubuntu-10.04-x86 // // // //基本 // // // // // // // //true // // // //running // // // //0 // // // // // // // // // // //1000 // // // // // // // // // // // //0 // // // // // // // //1 // // // // // // // //2 // // // //102 // // // // // // // //272 // // // // // // // // ubuntu-10.04 -x86 // // // 基本 // // // // // // // true // // // //実行中 // // // //0 // // // // // // // // // // // //10000 // // // // // // // //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 に答える