199

配列内のすべての値をクリアするには、どちらがより効率的ですか? 最初の例では、2 番目の例のループで毎回その関数を使用する必要があります。

foreach ($array as $i => $value) {
    unset($array[$i]);
}

またはこれ

foreach($blah_blah as $blah) {
    $foo = array();
    //do something
    $foo = null;
}
4

14 に答える 14

291

以下のコメントでザックが言ったように、単にそれを再インスタンス化することができます

$foo = array(); // $foo is still here

より強力なものが必要な場合は、シンボル テーブルから $foo もクリアされるため、unset を使用します。後で配列が必要な場合は、再度インスタンス化してください。

unset($foo); // $foo is gone
$foo = array(); // $foo is here again
于 2012-04-21T18:52:45.513 に答える
94

変数を空の配列にリセットしたいだけの場合は、単純に再初期化できます。

$foo = array();

これにより、それへの参照が維持されることに注意してください。

$foo = array(1,2,3);
$bar = &$foo;
// ...
$foo = array(); // clear array
var_dump($bar); // array(0) { } -- bar was cleared too!

それへの参照を壊したい場合は、最初に設定を解除します。

$foo = array(1,2,3);
$bar = &$foo;
// ...
unset($foo); // break references
$foo = array(); // re-initialize to empty array
var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged
于 2012-04-21T18:52:43.173 に答える
13

配列が連想的である場合、私は最初に言います。そうでない場合は、forループを使用します。

for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }

可能であれば、

$array = array();

配列を空の配列にリセットすることをお勧めします。

于 2012-04-21T18:51:04.093 に答える
9

unset()十分ではありませんか?

unset($array);
于 2012-04-21T18:50:49.290 に答える
7

どう$array_name = array();ですか?

于 2012-04-21T18:52:56.760 に答える
3

単純で経済的な方法かもしれません (使用する記号が少ない)...

$array = [];

PHPマニュアルで読むことができます:

PHP 5.4 以降では、array() を [] に置き換える短い配列構文も使用できます。

于 2019-08-09T10:21:29.053 に答える
0

unset関数は、ガベージ コレクターが昼休みをとっていないときにラウンドを行っている場合に便利です。

ただし、 unset 関数は単にデータへの変数参照を破棄するだけで、データはまだメモリ内に存在し、PHP はメモリへのポインタがなくなっているにもかかわらず、メモリが使用中と見なします。

解決策:変数に 割り当てnullて、少なくともガベージ コレクターがデータを取得するまで、データをクリアします。

$var = null;

同様の方法で設定を解除します!

unset($var);
于 2015-03-10T10:54:23.317 に答える
0

質問は投稿によって実際には答えられません。キーを保持し、値をクリアすることが問題の焦点です。

foreach($resultMasterCleaned['header'] as $ekey => $eval) {
    $resultMasterCleaned[$key][$eval] = "";                 
}

CSV 値を保持する 2 次元配列の場合と同様に、特定の行を空白にします。ループスルーが唯一の方法のようです。

于 2020-08-24T01:48:39.543 に答える