PHP count()将文本数组计为单个元素

时间:2018-04-15 00:31:57

标签: php linux

我在LAMP下运行PHP 7.0.22,在两个ubuntu 16.04上运行。

我的PHP代码如下

    $str="ls -1 /var/www/dropbox | egrep '*.CEL|*.cel'";
    $result= explode(PHP_EOL, shell_exec($str));
    $fileNames=$result;
    print_r($fileNames);
    echo "<br>";
    $inputFileCount=count($fileNames,1);
    echo "<br>";
    echo "File count:" . print_r($inputFileCount);
    echo "<br>";

我在屏幕上看到以下内容

Array ( [0] => prefix1.cel [1] => prefix12.cel [2] => ) 

File count:1

在我看来,计数应该是2。

3 个答案:

答案 0 :(得分:4)

使用glob()获取.cel个文件列表,即:

$files = glob("/var/www/dropbox/*.cel");
echo count($files)

循环使用:

foreach ($files as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

答案 1 :(得分:1)

您也可以使用PHP SPL Iterator classes

<?php
$folder = '/var/www/dropbox';

// define filtering (match only .cel or .CEL files)
$filter = new \RecursiveCallbackFilterIterator(
    new \RecursiveDirectoryIterator($folder, \FilesystemIterator::SKIP_DOTS), 
    function ($current, $key, $iterator) {
        return strtolower($current->getExtension()) === 'cel';
    }
);

$iterator = new \RecursiveIteratorIterator($filter);

// get count
echo iterator_count($iterator);

// loop over
if (iterator_count($iterator) > 0) {
    foreach ($iterator as $file) {
        echo $file;
    }
}

稍微多了一些代码然后是glob,但也是一个选项。

答案 2 :(得分:1)

ls -l为您提供显示大小,权限等的长列表。我认为这不是您想要的。

使用"\n"作为拆分参数来拆分新行。

explode()之后,您想要使用创建的数组。

还有一件事:请在代码中使用echoprint_r用于输出有关变量的更多信息。

$str="ls /var/www/dropbox | egrep '*.CEL|*.cel'";
$result= explode("\n", $str);

foreach($result as $filename) {
    echo $filename . "<br />";
}

$inputFileCount = count($result);
echo "<br>";
echo "File count:" . $inputFileCount;
echo "<br>";