Schimbarea unei singure valori afectează o altă valoare

Vă rugăm să aruncați o privire la următoarele:

foreach($a_Header['Details'] as $i_Detail => &$a_Detail)
    {
    echo "{$a_Detail['VEH_TREAD_OFF']}\n";

   //Make a back-up of the value
    $BAK_TREAD_OFF = $a_Detail['VEH_TREAD_OFF'];

   //Copy some data from the saved header
    foreach(array
        (
        'POD_QTYORD',
        'VEH_TREAD_OFF',
        'RPM_SCRM_FIXEDPRICE',
        'RPM_TRM_FIXEDPRICE',
        'RPM_TRM_COSTPERMM',
        'RPM_CTS_CASINGCOST',
        'CHARGE_DESC',
        'Hide',
        ) as $s_Column)
        {
        $a_Header['Details'][$i_Detail][$s_Column] = $a_SavedHeader['Details'][$i_Detail][$s_Column];
        }

    echo "{$a_Detail['VEH_TREAD_OFF']}\n";

   //Now restore our value
    $a_Detail['VEH_TREAD_OFF'] = $BAK_TREAD_OFF;
    }

Puteți vedea că, înainte de a intra în buclă for, am creat o valoare pe care o restaurez după.

Acest lucru se datorează faptului că, din anumite motive, se pierde în timpul bucla.

Eu nu sunt un guru PHP de nici o întindere, dar acest lucru nu mă deranjează nici un sfârșit, deoarece nu pot vedea de ce modificarea unei variabile ar afecta altul, cu excepția cazului în care există găuri de vierme în PHP!

Poate cineva să-mi spună de ce s-ar putea întâmpla asta?

Mulțumiri

0
Înainte de a adăuga codul de "backup și restaurare", am echo d conținutul care a afișat o valoare înainte și nici o valoare după.
adăugat autor CompanyDroneFromSector7G, sursa
Actualizați codul acum pentru a afișa unde provine $ a_Detail . Observați & - mă întreb dacă aceasta creează mai degrabă o referință decât o nouă variabilă -?
adăugat autor CompanyDroneFromSector7G, sursa
Ei bine, tocmai am googelat și se pare că este exact ceea ce face!
adăugat autor CompanyDroneFromSector7G, sursa
Cum vedeți că se pierde?
adăugat autor Pekka 웃, sursa
Nu văd nimic din codul pe care îl arătați că ar distruge $ a_Detail ['VEH_TREAD_OFF']; . Este acest cod 100% în cauză? Nu vă aflați în interiorul unei funcții cu asta sau ceva? (În PHP, funcțiile au propriul scop)
adăugat autor Pekka 웃, sursa
Unde provin $ a_Detail ? Cum îl inițializați?
adăugat autor lanzz, sursa

2 răspunsuri

$i_Detail => &$a_Detail

Now $a_Detail is a reference to $a_Header['Details'][$i_Detail]. both variables refer to a single value. Do not use & if you do not want that.

1
adăugat
Mulțumesc, m-am gândit deja că datorită comentariilor de mai sus. Nu este codul meu întâmplător.
adăugat autor CompanyDroneFromSector7G, sursa

Eșantionul de cod nu afectează deloc $ a_detail. Ești sigur că aceasta este singura referință la această variabilă? Folosești ceva de genul extract ()?

0
adăugat
Vedeți de ce am fost confuz atunci? Dar de fapt greșești, așa cum eram. Variabila $ a_detail este definită ca o referință la un element de $ a_header ['detail'], deci ce schimbări o va schimba pe cealaltă.
adăugat autor CompanyDroneFromSector7G, sursa
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT