您可以在空格处拆分字符串,$parts = explode(' ', $item)
然后使用 访问第九部分,$parts[8]
但我更喜欢正则表达式,即:
/^(?:.*? ){8}(.*?) /
如果您退后一步,这可以使整个过程更容易。我猜你的数组是file($someLogFile)
. 在这种情况下,您可以改为将文件读入字符串并一次获取所有文件名:
$log = file_get_contents($someLogFile);
preg_match_all('/^(?:.*? ){8}(.*?) /m', $log, $matches);
$fileNames = $matches[1];
更新
有了评论中的上下文,现在构建一个明智的解决方案要容易得多。不幸的是,FTP LIST 的输出通常不是一个简单的可解析制表符分隔结构,而是一个为人类可读性而非机器可读性而设计的 ASCII 表。
尽管如此,如果您知道格式,则可以使用捕获所有部分的正则表达式。
例子:
<?php
$ftp = ftp_connect('ftp.mozilla.org');
ftp_login($ftp, 'anonymous', '');
$rawlist = ftp_rawlist($ftp, '/');
$rawlist = join("\n", $rawlist);
preg_match_all('/^([drwx+-]{10})\s+(\d+)\s+(\w+)\s+(\w+)\s+(\d+)\s+(.{12}) (.*)$/m', $rawlist, $matches, PREG_SET_ORDER);
var_dump($matches);
输出:
array(3) {
[0]=>
array(8) {
[0]=>
string(62) "-rw-r--r-- 1 ftp ftp 528 Nov 01 2007 README"
[1]=>
string(10) "-rw-r--r--"
[2]=>
string(1) "1"
[3]=>
string(3) "ftp"
[4]=>
string(3) "ftp"
[5]=>
string(3) "528"
[6]=>
string(12) "Nov 01 2007"
[7]=>
string(6) "README"
}
[1]=>
array(8) {
[0]=>
string(66) "-rw-r--r-- 1 ftp ftp 561 Oct 03 15:44 index.ht
ml"
[1]=>
string(10) "-rw-r--r--"
[2]=>
string(1) "1"
[3]=>
string(3) "ftp"
[4]=>
string(3) "ftp"
[5]=>
string(3) "561"
[6]=>
string(12) "Oct 03 15:44"
[7]=>
string(10) "index.html"
}
[2]=>
array(8) {
[0]=>
string(59) "drwxr-xr-x 43 ftp ftp 4096 Aug 08 2012 pub"
[1]=>
string(10) "drwxr-xr-x"
[2]=>
string(2) "43"
[3]=>
string(3) "ftp"
[4]=>
string(3) "ftp"
[5]=>
string(4) "4096"
[6]=>
string(12) "Aug 08 2012"
[7]=>
string(3) "pub"
}
}
就我可以通过您的示例判断而言,该模式也应该对您有用。