12

動的に生成されたファイル名の配列があります。たとえば、次のようになります。

$files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file");

配列から破棄したい特定のファイル名がいくつかあります。

$exclude_file_1 = "meta-file-1";
$exclude_file_2 = "meta-file-2";

したがって、破棄したい要素の値は常にわかりますが、キーはわかりません。

現在、私はこれを行うためのいくつかの方法を検討しています。array_filter とカスタム関数を使用する 1 つの方法:

function excludefiles($v)
        {
        if ($v === $GLOBALS['exclude_file_1'] || $v === $GLOBALS['exclude_file_2'])
          {
          return false;
          }
        return true;
        }

$files = array_values(array_filter($files,"excludefiles"));

array_keys と unset を使用する別の方法:

$exclude_files_keys = array(array_search($exclude_file_1,$files),array_search($exclude_file_2,$files));
foreach ($exclude_files_keys as $exclude_files_key)
    {    
    unset($files[$exclude_files_key]);
    }
$files = array_values($page_file_paths);

どちらの方法でも、目的の結果が得られます。

どちらがより効率的か (そしてその理由) を考えているだけです。

それとも、これを行うための別のより効率的な方法があるのでしょうか?

array_search 関数で複数の検索値を持つ方法があるかもしれませんか?

4

3 に答える 3

32

あなたは単に使用する必要がありますarray_diff

$files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file");
$exclude_file_1 = "meta-file-1";
$exclude_file_2 = "meta-file-2";

$exclude = array($exclude_file_1, $exclude_file_2);
$filtered = array_diff($files, $exclude);

PHPの悪い点の1つは、特定の小さなことを実行するための関数が無数にあることですが、それが便利な場合もあります。

このような状況に遭遇した場合(関連する関数を見つけた後で解決策を見つけましたが、もっと良いものがあるかどうかわからない場合)、php.netの関数リストのサイドバーをゆっくりと閲覧することをお勧めします。関数名を読むだけで、莫大な利益を得ることができます。

于 2012-04-10T14:04:13.673 に答える
4

array_diff() を使用する

$files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file");
$exclude_file_array = array("meta-file-1", "meta-file-2");

$files にない $exclude_file_array のすべての要素を含む配列を返します。

$new_array = array_diff($files, $exclude_file_array);

独自の関数とループよりも優れています。

于 2012-04-10T14:16:17.053 に答える