Heim  >  Artikel  >  Backend-Entwicklung  >  Fragen zur Referenzübergabe beim Schleifen

Fragen zur Referenzübergabe beim Schleifen

WBOY
WBOYOriginal
2016-12-01 00:56:201018Durchsuche

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>

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>

<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 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.

Stellungnahme:
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