-1

次のような形式の配列があります。

Array
(
    [1] => 
Status   Name               DisplayName                           
    [2] => 
------   ----               -----------                           
    [3] => 
Running  ADWS               Active Directory Web Services         
)

これは配列を表示する前に設定解除されるため、値のキーはありません0。この配列はテキスト ファイルから生成されます。

$File = utf8_encode(file_get_contents("Services.txt"));

次に、この配列内の 3 番目のキーを取得します。

    [3] => 
Running  ADWS               Active Directory Web Services   

タブスペースで爆発する方法は次のとおりです。

array
(
   [1] => Running
   [2] => ADWS
   [3] => Active Directory Web Services
)

私は現在、間違った出力を生成している空白で爆発しています...どうすればこれに対処できますか?


正規表現を使用すると、次のようになります。

 preg_split('/\s+/', $String);




Array
(
[0] => Array
    (
        [0] => 
        [1] => Running
        [2] => 
        [3] => ADWS
        [4] => 
        [5] => 
        [6] => 
        [7] => 
        [8] => 
        [9] => 
        [10] => 
        [11] => 
        [12] => 
        [13] => 
        [14] => 
        [15] => 
        [16] => 
        [17] => 
        [18] => Active
        [19] => Directory
        [20] => Web
        [21] => Services
        [22] => 
        [23] => 
        [24] => 
        [25] => 
        [26] => 
        [27] => 
        [28] => 
        [29] => 
        [30] => 
    )

トリムの後に、explode(" ",$String);または上記の正規表現を使用すると、同様の結果が返されますが、30 個ではなく 20 個のキーが使用されます。


投稿された回答を使用して、次のことがわかりました。

[0] => Array
        (
            [0] => 
Running  ADWS               Active Directory Web Services         
        )

これは期待どおりではありません

4

2 に答える 2

2

それは私preg_splitとあなたの正規表現を使用して動作します/\s+/:

<?php
$s = 'Running  ADWS               Active Directory Web Services   ';
var_dump(preg_split('/\s+/', $s));
var_dump(preg_split('/\s+/', trim($s)));

次の出力が生成されます。

array(7) {
  [0]=>
  string(7) "Running"
  [1]=>
  string(4) "ADWS"
  [2]=>
  string(6) "Active"
  [3]=>
  string(9) "Directory"
  [4]=>
  string(3) "Web"
  [5]=>
  string(8) "Services"
  [6]=>
  string(0) ""
}
array(6) {
  [0]=>
  string(7) "Running"
  [1]=>
  string(4) "ADWS"
  [2]=>
  string(6) "Active"
  [3]=>
  string(9) "Directory"
  [4]=>
  string(3) "Web"
  [5]=>
  string(8) "Services"
}

コードパッドの例

アップデート

あなたが提供した情報は間違いなく大いに役立ちました。それが PowerShell によって生成されたという事実は、すでに問題の可能性を認識しており、提供されたリンクから実際のServices.txtファイルを見ることができ、私の考えがさらに証明されました。

Services.txtファイルは UTF-16 でエンコードされています。UTF-16 はマルチバイト文字列形式であり、UTF-8 と互換性がありません。UTF-8 コンテンツをまったくutf8_encode見ていないため、何もしません。代わりに、php のマルチバイト文字列を確認する必要があります (PHP はネイティブの Unicode 文字列をサポートしていないため)。

簡単にするための最良のオプションは、テキストを 1 バイト文字列 (UTF-8 など) に変換することです。を使用してそれを行うことができますmb_convert_encoding。したがってutf8_encode、ファイルからテキストを呼び出す代わりに、次のようにします。

$File = mb_convert_encoding(file_get_contents('Services.txt'), 'utf-8', 'utf-16');

そして、それはうまくいくはずです。

于 2013-05-02T00:05:31.953 に答える
0

http://php.net/manual/en/function.explode.php :

$arr = explode ( "\t", $file[3] );

次の理由から、二重引用符の使用に注意してください。

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

文字列が二重引用符 (") で囲まれている場合、PHP は特殊文字のエスケープ シーケンスをさらに解釈します。

\t 水平タブ (HT または ASCII の 0x09 (9))

于 2013-05-01T23:59:53.917 に答える