2

配列を処理し、より大きな配列セット内の特定の連想配列を削除しようとしています。私が持っているコードは、forループ内で特定のセクションをローカルで削除するために機能しますが、元の$cursor配列には影響しません。

foreach($cursor as $key) {

    foreach($key as $value => $k){

        if ($value == 'user'){

            unset($k['confinfo']);
        }
    }   
}

それはグローバル変数の問題ですか?元の変数の設定を解除するにはどうすればよいですか?

4

2 に答える 2

4

参照により元の配列を反復処理します。

foreach($cursor as &$key) // added &

これを行うときはいつでも、ループをたどって参照を破棄することをお勧めします。unset

foreach($cursor as &$key) {
    // ...
}
unset($key);

個人的にはこれは少し醜いですが(PHPのコースと同じです)、こうすることで、$key後で名前を再利用して、あらゆる種類の「興味深い」効果を引き起こすリスクを排除できます。

于 2012-10-16T19:38:56.807 に答える
3

問題は$k、ループで取得するのは、含まれている元の配列ではなく、$cursorループが次のラウンドに入ると破棄される単なるコピーであることです。confinfoインデックスを実際に削除するには、最初から作業を参照$cursorする必要があります。$cursor

交換

unset($k['confinfo']);

unset($cursor[$key][$value]['confinfo']);

他の回答ほど短くはありませんが、何が起こっているのかをよりよく示しているため、後でデバッグして拡張するのが簡単です。

于 2012-10-16T19:52:55.957 に答える