我有一个格式如下的数组:
Array
(
[1] =>
Status Name DisplayName
[2] =>
------ ---- -----------
[3] =>
Running ADWS Active Directory Web Services
)
没有0
值的键,因为在显示数组之前未设置此键,此数组是从文本文件生成的:
$File = utf8_encode(file_get_contents("Services.txt"));
现在,让我们在这个数组中取第三个键:
[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] =>
)
使用trim后跟explode(" ",$String);
或上面发布的正则表达式,返回类似的结果,但使用20个键而不是30个
使用发布的答案,我有以下内容:
[0] => Array
(
[0] =>
Running ADWS Active Directory Web Services
)
这不是预期的
答案 0 :(得分: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不兼容。所以你的utf8_encode
什么都不做,因为你根本不看UTF-8内容。相反,您需要查看php multibyte字符串(因为PHP不支持本机unicode字符串)。
为了方便起见,最好的选择是将文本转换为单字节字符串,例如UTF-8。您可以使用mb_convert_encoding
执行此操作。因此,不要在文件中的文本上调用utf8_encode
,而是执行此操作:
$File = mb_convert_encoding(file_get_contents('Services.txt'), 'utf-8', 'utf-16');
然后它应该有用。
答案 1 :(得分: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水平制表符(ASCII中的HT或0x09(9))