1

奇妙に思えますが、これに対する答えは見つかりませんが、次のようになります。

これ:

foreach ($stuffs as $stuffRow) {
    foreach ($stuffRow as $stuff) {
        if($stuff=== null){
            unset($stuff);
        }
    }
}

動かない。

「機能していない」と言うべきではないことはわかっていますが、それだけです。if条件が機能します。私はそれをテストしました。ただし、unsetを適用すると、key=>valueはまだそこにあります。

注:PHP 5.3

よろしくお願いします!

4

1 に答える 1

1

これはうまくいくかもしれませんが(私はこれをこのように行うことはなく、テストもしていません):

foreach ($stuffs as &$stuffRow) {
    foreach ($stuffRow as &$stuff) {
        if($stuff=== null){
            unset($stuff);
        }
    }
}

私が正しく覚えていれば、参照で渡すことはforeachsでは良い考えではありません(しかし、理由を思い出せません、どこかのphpドキュメントにあったかもしれません、誰かがコメントで明確にすることができますが、foreachは配列のコピーと参照の受け渡しは、元のコピーではなくコピーへの参照を渡しますが、これは単なる知識に基づく推測です)。代わりに、これを試してください。

foreach ($stuffs as $key1=>$stuffRow) {
    foreach ($stuffRow as $key2=>$stuff) {
        if($stuff=== null){
            unset($stuffs[$key1][key2]);
        }
    }
}

ちなみに、コードが機能しなかった理由は、foreachループが配列のCOPYを反復処理するためです。

于 2012-11-18T02:42:28.173 に答える