0

したがって、$_POST から引き出された連想配列 $data があります。以下のように、特定のキー->値を「プライバシー」配列に移動するなど、プログラムの後半で必要に応じて並べ替えるためにforeachをループして、ここでいくつかの要素を設定解除しようとしている障害に遭遇しました:

public function create_profile($data, $files, $status) {
        $files = $files['files'];
        unset($files['files']);
        $privacy = array();
        foreach ($data as $key => $value) {
            if (strpos($key, 'privacy') !== false) {
                $privacy[$key] = $value;
                unset($data[$key]);
            }
            if (($key == 'filename') || ($key == 'fileyear')) {
                $files[$key] = array();
                for ($i = 0; $i < sizeof($data[$key]); $i++) {
                    if ($data[$key][$i] != '') {
                        $files[$key][$i] = $data[$key][$i];
                    }
                }
            } else {
                $data[$key] = $value;
            }
            unset($data['filename']);
            unset($data['fileyear']);
        }

        $tokenized_name = str_replace(' ', '_', $data['display_name']);
        return($data);
}

プライバシー配列 print_r は本来あるべきものなので、適切な要素を見つけていることはわかっていますが、それらの設定を解除しているわけではありません。その理由を一生考えることはできません。つまり、それは確かに本当にばかげたものです。

4

1 に答える 1

0

あなたの$data配列には次のようなものがあると仮定します: $data['privacy'] = 'foo'; $data['privacy-something'] = 'バー'; $data['test'] = 'foobar';

この状況では、ステートメントが値を返すため、strpos($key, 'privacy')正しく機能しません。iffalse0

また、最後に小さなブレースの問題がありました。したがって、私にとって完璧に機能するコードは次のようになります。

$privacy = array();
foreach ($data as $key => $value) {
    if (strpos($key, 'privacy') !== false) {
        $privacy[$key] = $value;
        unset($data[$key]);
    }
}

編集

問題はここにあります:

else {
    $data[$key] = $value;
}

未設定の値を再度設定しています。なぜこれが必要なのですか?

于 2013-10-29T06:45:05.300 に答える