使用foreach循环,无需修改即可更改数组的值

时间:2018-09-09 10:05:12

标签: php arrays reference

我有一个示例代码。真奇怪!即使不对定义的数组进行任何更改,但我定义的数组的值仍然被更改。

class RegistrationForm(UserCreationForm):
    username = forms.CharField(required=True, label='Username', widget=forms.TextInput(attrs={'class': 'class-one-input-fields'}))
    password1 = forms.CharField(required=True, label='Password', widget=forms.PasswordInput(attrs={'class': 'class-one-input-fields'}))
    password2 = forms.CharField(required=True, label='Password confirmation', widget=forms.PasswordInput(attrs={'class': 'class-one-input-fields'}))
    pubpgp = forms.CharField(required=True, label='Public PGP Key', widget=forms.Textarea(attrs={'class': 'class-two-input-fields'}))
    captcha = CaptchaField()

    def save(self, commit=True):
        username = super(RegistrationForm, self).save(commit=False)
        username.pubpgp = self.cleaned_data['pubpgp']

        if commit:
            username.save()

        return username

请您解释一下,它是怎么发生的?

3 个答案:

答案 0 :(得分:2)

您确实要更改原始数组,因为在数组循环中使用了&

references的信号表示为@axiac注释。

为了避免对原始数组进行更改,请使用以下for循环:

foreach ($myarr as $myvalue)

答案 1 :(得分:0)

您正在传递myarr的地址,其中myvalue使用与myarr相同的地址,这就是为什么更改的原因

使用此

  $myarr = array(1, 2, 3, 4);
    foreach ($myarr as $myvalue) {
        $myvalue = $myvalue * 2;
    }
    print_r($myarr);

答案 2 :(得分:0)

您是否尝试过在$ myvalue之前不使用“&”?

请在此处阅读PHP: What does a & in front of a variable name mean?