3

ファイル名の配列があります。

配列に拡張子「.txt」のファイルがあるかどうかを確認したい。

どうやってやるの?

in_array特定の値のみをチェックします。

4

7 に答える 7

4

試してみてくださいarray_filter.txtコールバックで、拡張機能の存在を確認します。

の結果にarray_filterエントリがある場合(真実である場合)、最初の1つまたはすべてを取得できます。配列が空の場合、一致するものはありませんでした。

于 2012-12-19T16:20:06.687 に答える
3

配列内のアイテムをループしてから、各アイテムに対して正規表現またはstrpos一致を実行できます。一致するものが見つかったら、trueを返すことができます。

strpos()

$array = array('one.php', 'two.txt');

$match = false;
foreach ($array as $filename) {
    if (strpos($filename, '.txt') !== FALSE) {
        $match = true;
        break;
    }
}

正規表現あり:

$array = array('one.php', 'two.txt');

$match = false;
foreach ($array as $filename) {
    if (preg_match('/\.txt$/', $filename)) {
        $match = true;
        break;
    }
}

どちらもに$match等しくなりtrueます。

于 2012-12-19T16:19:56.173 に答える
1
$files = array('foo.txt', 'bar.txt', 'nope.php', ...);

$txtFiles = array_filter($files, function ($item) {
    return '.txt' === substr($item, -4); // assuming that your string ends with '.txt' otherwise you need something like strpos or preg_match
});

var_dump($txtFiles); // >> Array ( [0] => 'foo.txt', [1] => 'bar.txt' )

関数はarray_filter配列をループし、値をコールバックに渡します。コールバックがtrueを返す場合は値を保持し、そうでない場合は配列から値を削除します。すべてのアイテムがコールバックに渡された後、結果の配列が返されます。


.txtああ、あなたはただ配列にあるかどうか知りたいだけです。他のいくつかの提案:

$match = false;

array_map(function ($item) use ($match) {
    if ('.txt' === substr($match, -4)) {
        $match = true;
    }
}, $filesArray);
$match = false;
if (false === strpos(implode(' ', $filesArray), '.txt')) {
    $match = true;
}
于 2012-12-19T16:20:42.143 に答える
0
$iHaz = FALSE;

foreach ($arr as $item) {
    if (preg_match('/\.txt$/', $item)) {
        $iHaz = TRUE;
        break;
    }
}

示唆している他の答えとは反対にarray_filter、私は何かを返しません。配列に存在するかどうかを確認するだけです。array_filterさらに、この実装は、何かが見つかるとループから抜け出すためよりも効率的です。

于 2012-12-19T16:22:26.200 に答える
0

あなたが使用する必要があるファイルを扱っているのでarray_filterpathinfo

$files = array_filter(array("a.php","b.txt","z.ftxt"), function ($item) {
    return pathinfo($item, PATHINFO_EXTENSION) === "txt";
});

var_dump($files); // b.txt
于 2012-12-19T16:34:27.567 に答える
0

次を使用して、ファイル拡張子に基づいて配列の結果をフィルタリングしますarray_filter

// Our array to be filtered
$files = array("puppies.txt", "kittens.pdf", "turtles.txt");

// array_filter takes an array, and a callable function
$result = array_filter($files, function ($value) {
    // Function is called once per array value
    // Return true to keep item, false to filter out of results
    return preg_match("/\.txt$/", $value);
});

// Output filtered values
var_dump($result);

その結果、次のようになります。

array(2) {
  [0]=> string(11) "puppies.txt"
  [2]=> string(11) "turtles.txt"
}

実行する:http://goo.gl/F3oJr

于 2012-12-19T16:45:16.750 に答える
0

で終わる文字列のみを含むフィルター処理された配列が必要な場合は.txt、PHP8にネイティブ関数があります。

コード:(デモ

$array = ['one.php', 'two.txt'];

var_export(
    array_filter(
        $array,
        fn($v) => str_ends_with($v, '.txt')
    )
);

真/偽の結果が必要で、配列全体を反復する必要がない場合は、条件付きbreakでループします。(デモ

$found = false;
foreach ($array as $filename) {
    if (str_ends_with($filename, '.txt')) {
        $found = true;
        break;
    }
}
var_export($found);
于 2022-01-22T07:56:59.080 に答える