17

foreachループ内で参照によって配列にアクセスしていますが、unset()関数が機能していないようです。

foreach ( $this->result['list'] as &$row ) {
    if ($this_row_is_boring) {
        unset($row);
    }
}

print_r($this->result['list']); // Includes rows I thought I unset

アイデア?ありがとう!

4

3 に答える 3

33

参照の設定を解除しています(参照を解除しています)。キーに基づいて設定を解除する必要があります。

foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}
于 2010-06-16T15:47:25.607 に答える
8
foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}
unset($row);

注意:参照付きでを使用している場合は foreach、unsetを使用して逆参照し、そのforeach上に次の参照がコピーされないようにする必要があります。より詳しい情報

于 2010-06-16T15:52:28.047 に答える
5

上記の答えに対する少しの説明。

unset($row)変数$rowが設定解除された後。$rowこれは、のデータが削除されることを意味するものではありません。リストには、を指す要素もあります$row

変数をラベルと考えると役立ちます。データには1つ以上のラベルを付けることができ、unsetそのラベルは削除されますが、実際のデータには影響しません。すべてのラベルが削除されると、データは自動的に削除されます。

于 2010-06-16T16:06:14.720 に答える