4

重複の可能性:
空の配列要素を削除する

配列から空の要素を削除したい。によって配列に設定された文字列がありますexplode()。次にarray_filter()、空の要素を削除するために使用しています。しかし、それはうまくいきません。以下のコードを参照してください。

$location = "http://www.bespike.com/Packages.gz";
$handle = fopen($location, "rb");
$source_code = stream_get_contents($handle);
$source_code = gzdecode($source_code);
$source_code = str_replace("\n", ":ben:", $source_code);
$list = explode(":ben:", $source_code);
print_r($list);

しかし、それは機能しません$list。まだ空の要素があります。私もempty()関数でそれをやろうとしましたが、結果は同じです。

4

3 に答える 3

8

ファイルに\r\n改行が含まれている場合、そのように、で分割すると、空に見える\nがそうではない要素が得られます-それには.が含まれています.\r

$source_code = gzdecode($source_code);
$list = array_filter(explode("\r\n", $source_code));
print_r($list);

「\n」の代わりに「\r\n」を置き換えて、既存のコードを試すこともできます (まだどこかに array_filter が必要です)。

おそらく遅いがより柔軟なオプションは、Unix と Windows の両方で、任意の改行に一致preg_splitする特別な正規表現メタ文字を使用します。\R

$source_code = gzdecode($source_code);
$list = array_filter(preg_split('#\\R#', $source_code));
print_r($list);
于 2012-07-10T18:10:28.843 に答える
1
$arr = array('one', '', 'two');
$arr = array_filter($arr, 'strlen');

これはキーをリセットしないことに注意してください。上記により、 と の 2 つのキーの配列が残り0ます2。配列が連想ではなくインデックス付けされている場合は、次の方法でこれを修正できます

$arr = array_values($arr);

キーは と に0なり1ます。

于 2012-07-10T18:07:58.683 に答える
0

これはあなたが必要とするものです:

$list = array_filter($list, 'removeEmptyElements');

function removeEmptyElements($var)
{
  return trim($var) != "" ? $var : null;
}

コールバックが指定されていない場合、FALSE に等しい入力のすべてのエントリが削除されます。しかし、あなたの場合、FALSEではない長さ1の空の文字列があります。そのため、コールバックを提供する必要があります

于 2012-07-10T18:26:28.347 に答える