Fragen zur Referenzübergabe beim Schleifen

WBOY
Freigeben: 2023-03-01 20:46:01
Original
975 Leute haben es durchsucht

Fragen zur Referenzübergabe beim Schleifen

Wenn der Wert zum ersten Mal als Referenz übergeben wird, wird der Wert des Array-Elements immer noch geändert Wert eines Elements? Und die ersten paar Elemente haben sich nicht geändert, aber das letzte hat sich geändert?

<code><?php
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);</code>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

Fragen zur Referenzübergabe beim Schleifen

Wenn der Wert zum ersten Mal als Referenz übergeben wird, wird der Wert des Array-Elements immer noch geändert Wert eines Elements? Und die ersten paar Elemente haben sich nicht geändert, aber das letzte hat sich geändert?

<code><?php
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);</code>
Nach dem Login kopieren
Nach dem Login kopieren

<code>$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
unset($v);//foreach 使用引用时在处理完后立即断开引用关系,或则把下面的$v=>$va
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);

</code>
Nach dem Login kopieren

Nach der ersten Schleife $v = e;//Hier gibt es immer noch eine Referenzbeziehung&$arr['e'];

Der vorletzte Schritt der zweiten Schleife ist &$v = $arr['d']; dann &$arr['e'] = &$v = $arr['d'];

Dies ist eine klassische Falle von PHP-Referenzen.

Lösung: Fügen Sie einfach unset($v); nach dem ersten foreach hinzu.

Das Prinzip ist abgekürzt, Sie können selbst googeln/baidu.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!