0

所以我有一个关联数组 $data,它是从 $_POST 中提取的。使用 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'] = 'bar'; $data['test'] = 'foobar';

在这种情况下strpos($key, 'privacy')将无法正常工作,因为if语句将返回false0

最后还有一个小支撑问题。所以对我来说完美的代码看起来像这样:

$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 回答