Luați ultima valoare a matricei. PHP: Eliminarea elementelor matricei. Îndepărtarea elementelor folosind metodele cu șiruri

ieșire cheie (24)

Scriu un creator de interogări SQL folosind niște parametri. În Java, este foarte ușor să detectați ultimul element al unui tablou dintr-o buclă for prin simpla verificare a poziției curente a matricei cu lungimea matricei.

Pentru(int i=0; i< arr.length;i++){ boolean isLastElem = i== (arr.length -1) ? true: false; }

În PHP au indecși non-întregi pentru accesarea tablourilor. Deci, trebuie să iterați prin matrice folosind o buclă foreach. Acest lucru devine problematic atunci când trebuie să luați o decizie (în cazul meu, adăugați un parametru sau/și atunci când construiți interogarea).

Sunt sigur că trebuie să existe o modalitate standard de a face asta.

Cum rezolvi asta în PHP?

Răspunsuri

De asemenea, puteți face ceva de genul acesta:

End($elemente); $endKey = cheie($elemente); foreach ($elemente ca $cheie => $valoare) ( ​​dacă ($key == $endKey) // -- acesta este ultimul element ( // face ceva ) // mai mult cod)

De asemenea, puteți încerca acest lucru pentru a face interogarea dvs.... afișată aici folosind INSERT

"luni","două"=>"marți","trei"=>"miercuri","patru"=>"joi","cinci"=>"vineri","șase"=>"sâmbătă"," șapte" => "duminică"); $keys = array_keys($săptămână); $șir = "INSERT INTO my_table (""; $șir .= implod("","", $chei); $șir .= "") VALORI (""; $șir .= implod("","" , $săptămână); $șir .= "");"; echo $șir; ?>

Am un sentiment puternic că la baza acestei „probleme XY” OP-ul a vrut pur și simplu o funcție implode().

Pentru că intenția ta de a găsi matricea EOF este doar lipici. Consultați tacticile de mai jos. Nu aveți nevoie de EOF:

$given_array = array("coloana1"=>"valoarea1", "coloana2"=>"valoarea2", "coloana3"=>"valoarea3"); $clei = ""; foreach($given_array as $coloana_nume=>$valoare)( $unde .= " $clei $nume_coloană = $valoare"; //adăugarea lipiciului $clei = "ȘI"; ) echo $unde;

Coloana1 = valoare1 ȘI coloana2 = valoare2 ȘI coloana3 = valoare3

Iată un alt mod de a face acest lucru:

$arr = interval(1, 10); $end = sfârşit($arr); reset($arr); while(listă($k, $v) = fiecare($arr)) ( dacă($n == $sfârșit) ( echo "ultimul!"; ) else ( echo sprintf ("%s ", $v); ) )

Pentru scenariile care generează interogări SQL sau orice altceva care face o altă acțiune asupra primului sau ultimului element, este mult mai rapid (aproape de două ori mai rapid) pentru a evita utilizarea verificărilor inutile ale variabilelor.

Soluția actuală acceptată utilizează o buclă și o verificare în interiorul buclei care se va face la fiecare_iterație, modalitatea corectă (rapidă) de a face acest lucru este:

$numItems = count($arr); $i=0; $firstitem=$arr; $i++; în timp ce($i<$numItems-1){ $some_item=$arr[$i]; $i++; } $last_item=$arr[$i]; $i++;

Un mic test acasă a arătat următoarele:

test1: 100.000 de rulări ale modelului morgă

timp: 1869,3430423737 milisecunde

test2: 100.000 de rulări ale modelului, dacă este cel mai recent

timp: 3235,6359958649 milisecunde

Îmi plac următoarele, deoarece simt că este destul de îngrijită. Să presupunem că creăm un șir cu delimitatori între toate elementele: de exemplu, a, b, c

$primul = adevărat; foreach ($articole ca $articol) ( $str = ($primul)?$primul=fals:", ".$articol; )

$page_comment): ?>

Când toEnd ajunge la 0, înseamnă că se află la ultima iterație a buclei.

$toEnd = count($arr); foreach($arr ca $cheie=>$valoare) ( ​​dacă (0 === --$toEnd) ( echo "ultimul index! $valoare"; ) )

Ultima valoare este încă disponibilă după buclă, așa că dacă doriți doar să o folosiți pentru mai multe lucruri după buclă, aceasta este mai bine:

Foreach($arr ca $cheie=>$valoare) ( ​​//ceva) echo "ultimul index! $cheie => $valoare";

Dacă nu doriți să tratați ultima valoare ca bucle interioare speciale. Acest lucru ar trebui să fie mai rapid dacă aveți matrice mari. (Dacă reutilizați o matrice după o buclă în același domeniu, mai întâi trebuie să „copiați” matricea).

//Dacă utilizați acest lucru într-un cod global mare, fără spații de nume sau funcții, atunci puteți copia matricea astfel: //$array = $originalArrayName; //decomentează pentru a copia o matrice pe care o poți folosi după această buclă //end($array); $lastKey = cheie($array); //decomentează dacă folosești cheile $lastValue = array_pop($array); //Faceți ceva special cu ultima valoare aici înainte de a procesa toate celelalte? echo "Ultimul este $lastValue", "\n"; foreach ($array ca $cheie => $valoare) (//faceți ceva cu toate valorile înainte de ultima valoare echo „Toate, cu excepția ultimei valori: $valoare”, „\n”; ) //faceți ceva special cu ultima valoare aici după ce le procesezi pe toate celelalte? echo "Ultimul este $lastValue", "\n";

Și pentru a răspunde la întrebarea dvs. inițială „în cazul meu, adăugați parametrul sau/și când construiți interogarea”; aceasta va acoperi toate valorile și apoi le va concatena într-un șir cu „și” între ele, dar nu înainte de prima valoare sau după ultima valoare:

$params = ; foreach ($array ca $valoare) ( ​​$params = doSomething($value); ) $parameters = implode(" și ", $params);

Puteți utiliza în continuare această metodă cu tablouri asociative:

$keys = array_keys($array); pentru ($i = 0, $l = count($array); $i< $l; ++$i) { $key = $array[$i]; $value = $array[$key]; $isLastItem = ($i == ($l - 1)); // do stuff } // or this way... $i = 0; $l = count($array); foreach ($array as $key =>$valoare) ( ​​$isLastItem = ($i == ($l - 1)); // face lucruri ++$i; )

O altă modalitate este să vă amintiți rezultatul anterior al buclei și să îl utilizați ca rezultat final:

$rezultat = $unde = ""; foreach ($condiții ca $col => $val) ( $result = $where .= $this->getAdapter()->quoteInto($col." = ?", $val); $where .= "ȘI " ; ) returnează $this->delete($result);

Eu personal folosesc un design ca acesta, care ușurează utilizarea elementelor html

    Și
  • : Schimbați doar egalitatea pentru o altă proprietate...

    O matrice nu poate conține elemente false, dar toate celelalte elemente sunt transmise la o valoare booleană falsă.

    $tabel = matrice("a", "b", "c"); $it = reset($tabel); while($it !== false) ( echo "toate buclele";echo $it; $nextIt = next($table); if ($nextIt === false || $nextIt === $it) ( echo " ultima buclă sau două articole identice"; ) $it = $nextIt; )

    Puteți obține direct cel mai recent index:

    $numItems = count($arr);

    echo $arr[$numItem-1];

    Presupunând că aveți o matrice stocată într-o variabilă...

    Foreach($array ca $cheie=>$valoare) ( ​​echo $valoare; if($cheie != count($array)-1) ( echo ", "; ) )

    Se pare că vrei ceva de genul acesta:

    $array = array("Primul", "Al doilea", "Al treilea", "Ultimul"); foreach($array ca $cheie => $valoare) (​if(end($array) === $valoare) ( ​​echo „ultimul index!” . $valoare; ) )

    Dacă trebuie să faceți ceva pentru fiecare element, cu excepția primului sau ultimului, și numai dacă există mai mult de un element în matrice, prefer următoarea soluție.

    Știu că sunt multe soluții de mai sus și postate cu luni/an înaintea mea, dar asta simt că este destul de elegant. Verificarea fiecărei bucle este, de asemenea, o verificare logică, spre deosebire de o verificare numerică „i = (count-1)”, care poate reduce supraîncărcarea.

    Structura buclei poate părea incomodă, dar o puteți compara cu ordonarea etichetelor (start), tfoot (end), tbody (current) într-un tabel HTML.

    $primul = adevărat; foreach($array as $key => $value) ( ​​​​dacă ($first) ($first = false; // Faceți ceea ce doriți să faceți înainte ca primul element să ecou „Lista de perechi de chei, valori:\n" ; ) else ( // Faceți ceea ce doriți să faceți la sfârșitul fiecărui element // cu excepția ultimului, presupunând că lista are mai mult de un element ecou „\n”; ) // Faceți ceea ce doriți să faceți pentru curentul element echo $key . " => " . $value; )

    De exemplu, în termeni de dezvoltare web, dacă doriți să adăugați border-bottom pentru fiecare element, cu excepția ultimuluiîntr-o listă neordonată (ul) atunci puteți adăuga în schimb border-top pentru fiecare element, cu excepția primului(CSS:first-child, acceptat de IE7+ și Firefox/Webkit, acceptă această logică, în timp ce:last-child nu este acceptat de IE7).

    Puteți reutiliza în mod liber variabila $first pentru fiecare buclă imbricată și totul va funcționa bine, deoarece fiecare buclă face ca $first să fie fals în timpul primului proces al primei iterații (deci pauzele/excepțiile nu vor cauza probleme).

    $primul = adevărat; foreach($array as $key => $subArray) ( if ($first) ( $string = "Lista de chei => perechi de matrice valori:\n"; $first = false; ) else ( echo "\n"); ) $șir .= $cheie . "=>("; $primul = adevărat; foreach($subArray ca $cheie => $valoare) ( ​​dacă ($primul) ( $primul = fals; ) else ( $șir .= ", "; ) $șir .= $cheie . "=>" . $valoare; ) $șir .= ")"; ) echo $șir;

    Exemplu de ieșire:

    Lista cheii => perechi de matrice valori: key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2) key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3) key3=>(v3_key1=>v3_val1=>v )

    O modalitate ar putea fi detectarea următorului iterator. Dacă nu există următorul pe iterator, înseamnă că sunteți în ultima buclă.

    Foreach ($some_array ca $element) ( if(!next($some_array)) ( // Acesta este ultimul $element ) )

    Deci, dacă matricea dvs. are valori unice de matrice, atunci determinarea ultimei iterații este trivială:

    Foreach($array ca $element) ( dacă ($element === end($array)) echo "ULTIMUL ELEMENT!"; )

    După cum puteți vedea, acest lucru funcționează dacă ultimul element apare o singură dată în matrice, altfel veți primi o alarmă falsă. În aceasta, nu, trebuie să comparați cheile (care sunt desigur unice).

    Foreach($array ca $key => $element) ( end($array); if ($key === key($array)) echo "ULTIMUL ELEMENT!"; )

    Rețineți, de asemenea, operatorul de contact strict, care este destul de important în acest caz.

    Iată soluția mea: obțineți doar contorul matricei dvs., minus 1 (începând de la 0).

    $lastkey = count($array) - 1; foreach($array ca $k=>$a)( if($k==$lastkey)( /*fa ceva*/ ) )

    Se pare că vrei ceva de genul acesta:

    $numItems = count($arr); $i = 0; foreach($arr ca $cheie=>$valoare) ( ​​dacă(++$i === $numItem) ( echo „ultimul index!”; ) )

    Acestea fiind spuse, nu doriți să - iterați peste o „matrice” folosind foreach în php.

    Există deja multe răspunsuri, dar merită să cercetăm și iteratoare, mai ales că s-a cerut modul standard:

    $arr = interval(1, 3); $it = nou CachingIterator(nou ArrayIterator($arr)); foreach($it ca $cheie => $valoare) ( ​​dacă (!$it->hasNext()) echo „Last:”; echo $valoare, „\n”; )

    Este posibil să găsiți ceva care o face mai flexibilă și pentru alte cazuri.

    Eroare fatală: Apelarea unei funcții membru... pe un non-obiect

    Se întâmplă cu cod similar cu xyz->method() unde xyz nu este un obiect și, prin urmare, această metodă nu poate fi apelată.

    Aceasta este o eroare fatală care va opri scriptul (notificare de compatibilitate înainte: aceasta va deveni o eroare de captare începând cu PHP 7).

    Cel mai adesea, acesta este un semn că codul nu are verificarea erorilor. Confirmați că un obiect este de fapt un obiect înainte de a-i apela metodele.

    un exemplu tipic ar fi

    // ... un cod folosind PDO $statement = $pdo->prepare("interogare invalidă", ...); $statement->execute(...);

    În exemplul de mai sus, cererea nu poate fi pregătită și prepare() atribuie false la $statement . Încercarea de a apela metoda execute() va avea ca rezultat o eroare fatală, deoarece false este un „non-obiect” deoarece valoarea este booleană.

    Descoperi De ce funcția ta a returnat o valoare booleană în loc de un obiect. De exemplu, verificați obiectul $pdo pentru ultima eroare care a apărut. Detaliile despre cum să depanați acest lucru vor depinde de modul în care sunt gestionate erorile pentru funcția/obiectul/clasa în particular.

    Chiar dacă ->prepare eșuează, mânerul bazei de date $pdo nu intră în domeniul curent. Găsiți unde a decis. Apoi transmiteți-l ca parametru, stocați-l ca proprietate sau partajați-l prin domeniul global.

    O altă problemă ar putea fi crearea condiționată a unui obiect și apoi încercarea de a apela o metodă în afara acelui bloc condiționat. De exemplu

    If ($someCondition) ( $myObj = new MyObj(); ) // ... $myObj->someMethod();

    Încercând să executați o metodă în afara unui bloc condiționat, obiectul dvs. nu poate fi definit.

    Întrebări înrudite:

    • Apelarea unei funcții membru pe un non-obiect
    • Lista tuturor întrebărilor PHP „Eroare fatală: Apel la funcția membru... pe non-obiect”.

    PHP este promițător și modern: sintaxă de înaltă calitate și capacitatea de a face semantică dincolo de ceea ce este permis. Implementarea ideilor de programare orientată pe obiecte și libertatea de a schimba tipul unei variabile face ca cele mai sălbatice fantezii tale să devină realitate.

    Matricele sunt un design străvechi, iar cele asociative sunt mai mult un tribut adus vremurilor decât o cerință a practicii. Deși există un număr suficient de sarcini care implică crearea de colecții de date cu conținut nepredeterminat (cantitate, valori, tipuri și indici), care sunt disponibile pentru vizualizare și utilizare în bucle. Ultimul element al matricei este disponibil folosind orice metodă de creație. Matricele - obișnuite și asociative - vă permit să creați liste, dar în sintaxa PHP normală aceasta are o utilizare limitată.

    Valoarea curentă a matricei

    Dacă facem abstracție de la indici și folosim construcția

    $arData = new scField(); // scNumber, scString, scParagraph, ...

    unde scField() este constructorul unui obiect abstract - un „element de informare” care are descendenți: numere (scNumber), șiruri de caractere (scString), fraze (scParagraph), ... obținem în PHP: ultimul element = un tablou de obiecte care își prezintă proprietățile ca element real.

    În esență, nu contează ce element este considerat relevant, dar în acest caz va trebui să urmăriți indicatorul (în PHP - un cursor) din interiorul matricei. Mai des, trebuie să aveți propriul indicator de element. Nu este nevoie de un cursor în ideea PHP „last element = array”. Accesibil prin funcțiile end() și array_pop(), ultimul element își deleagă proprietățile matricei. Folosind array_pop() în plus, matricea apare automat la elementul anterior și proprietățile acestuia se modifică în consecință. Acest lucru face posibilă deplasarea printre elemente.

    Deci, a pune sintaxa PHP în context, a prelua ultimul element al unui tablou înseamnă de fapt folosirea proprietăților sale. În mod consecvent, prin plasarea și îndepărtarea elementelor se obține dinamica proprietăților, dinamica unuia nou format în limitele sintaxei disponibile.

    Primul și alte elemente

    Există funcții pentru lucrul cu primul element al matricei și mutarea pointerului intern. În sintaxa normală care implementează practica clasică de programare, acestea sunt aplicabile. În ceea ce privește crearea de tablouri cu semnificație în schimbare dinamică - nr.

    În programare, vorbim mereu despre luarea deciziilor: variabilele iau valori, instrucțiunile condiționate schimbă cursul algoritmului, buclele analizează ceva și, în cele din urmă, se produce un rezultat.

    Dacă mutați centrul de greutate către elementul în sine și îl lăsați să ia propriile decizii, implementarea programului capătă un aspect complet diferit, semnificativ. Cel mai adesea, aceasta este metoda care vă permite să atingeți obiectivul, mai ales când vine vorba, de exemplu, de utilizarea a numeroase etichete de document *.docx scrise în standardul Open XML.

    În PHP, obținerea ultimului element al unui tablou are o nouă semnificație și posibilități bune.

    Încărcarea fișierelor și dinamica proprietăților matricei

    Când un site oferă posibilitatea de a descărca orice fișiere, este convenabil să folosiți ideea unui obiect abstract, de exemplu, scFile și descendenții săi scImage, scDocument, scTabe, care vor avea aceleași proprietăți, dar manifestarea și semnificația lor. (conținutul) va fi diferit. În contextul sintaxei PHP (last element = array), folosind funcția end(), o puteți folosi așa cum definește ultimul element. Această soluție este interesantă deoarece inversează reprezentările obișnuite și vă permite să navigați prin structura de date așa cum a fost formată.

    Această utilizare a matricelor le oferă conținut complet nou. Acest lucru este oferit de sintaxa PHP, dar folosirea acesteia în acest fel deschide o mulțime de posibilități.

    După ce au furnizat metode de vizualizare, salvare într-o bază de date, restabilire la starea de funcționare (de exemplu), nu va trebui să vă gândiți la ce să faceți într-un anumit caz. Toate fișierele descărcate sunt plasate secvențial în matrice, iar atunci când este procesată, aceleași metode sunt întotdeauna apelate conform aceleiași scheme, dar fișierul imagine va fi afișat ca atare, fișierul tabelar ca tabel și documentul ca textul corespunzător. Accesibil prin sintaxa PHP, ultimul element al matricei este echipat cu proprietățile și conținutul său specific.

    În acest din urmă caz, documentul are întotdeauna caractere, linii, numere și, cel mai important, formatare. Urmărirea fiecărui element este dificilă, dar oferind obiectul potrivit pentru fiecare element de format, puteți obține documentul așa cum este, fără să vă gândiți.

    Stiva și recursiunea în sintaxă

    Când se lucrează numai cu ultimul element, condiția principală este stiva, dar atunci când acest element este executat și se folosește aceeași construcție în el, și mai ales în sine, este recursiunea. Puteți spune o mulțime de lucruri bune despre bibliotecile PHPOffice, de exemplu PHPWord, dar este imposibil de spus că acestea implementează un mecanism cu drepturi depline care traduce formatarea documentului sursă în rezultat.

    Într-adevăr, folosind PHPOffice\PHPWord puteți deschide pur și simplu orice document Word (*.docx), dar aceasta este doar o arhivă cu multe fișiere xml structurate, imagini, obiecte etc.

    În același timp, dacă luați doar fișiere xml, deși sunt interdependente (în ceea ce privește stilurile, tabele, imagini), nu va fi posibil să creați un document nou bazat pe cel vechi și să transferați pur și simplu modificările dorite asupra acestuia (de exemplu, schimbați fontul, culorile, formatarea). Există multe opțiuni pentru utilizarea etichetelor Open XML și chiar și un produs atât de bine funcțional precum MS Word nu face față întotdeauna ideilor utilizatorului, făcând greșeli.

    De fapt, un fișier *.docx este o arhivă zip, cu o structură clară și ușor de înțeles. Folosind un număr mic de obiecte, îl puteți descrie formal și obține, în momentul citirii, o structură de date cu drepturi depline, independentă, care poate fi manipulată semantic.

    În acest caz, informațiile din document sunt o structură formală de date. Dându-i dinamică, puteți trece cu ușurință la nivelul sensului și a abstractiza din sintaxă.

    Reg.ru: domenii și găzduire

    Cel mai mare registrator și furnizor de găzduire din Rusia.

    Peste 2 milioane de nume de domenii în serviciu.

    Promovare, corespondență de domeniu, soluții de afaceri.

    Peste 700 de mii de clienți din întreaga lume și-au făcut deja alegerea.

    Cadru bootstrap: aspect adaptiv rapid

    Curs video pas cu pas despre elementele de bază ale aspectului adaptiv în cadrul Bootstrap.

    Învățați să scrieți simplu, rapid și eficient folosind un instrument puternic și practic.

    Aspect pentru a comanda și a fi plătit.

    * Treceți mouse-ul peste pentru a întrerupe derularea.

    Inapoi inainte

    PHP: Eliminarea elementelor matricei

    Ne confruntăm cu o sarcină aparent banală: eliminarea unui element de matrice. Sau mai multe elemente.

    Cu toate acestea, cu toată simplitatea sa, există opțiuni care nu sunt în întregime evidente și care merită să știți dacă doriți să duceți PHP puțin mai departe decât „Bună, lume!” :)

    Să începem cu baza în sine: pentru a elimina un element, trebuie să utilizați funcția unset():

    Unset($array); unset($array["foo"]);

    Unset($array, $array); unset($array["foo"], $array["bar"]);

    Următoarea întrebare logică este: cum să ștergeți mai multe elemente care urmează unul altuia (adică adiacente)? Pentru a elimina mai multe elemente adiacente, utilizați funcția array_splice():

    Array_splice($array, $offset, $lungime);

    Vă rugăm să rețineți că atunci când utilizați aceste funcții, toate referințele la aceste elemente dispar. Dacă doriți să lăsați o cheie în matrice, dar să o asociați cu o valoare goală, atribuiți elementul dorit unui șir gol:

    $array = $array["foo"] = "";

    Este important să înțelegeți că funcția unset() elimină elementul, în timp ce atribuirea „” elementului nu îl elimină, dar face ca valoarea acestuia să fie egală cu șirul gol.

    Dacă lucrați cu numere, probabil că ar fi mai bine să asociați valoarea 0 cu o astfel de cheie.

    Să presupunem că, dacă o companie a încetat să mai producă piese pentru modelul HBL-568, atunci se poate face o modificare a matricei de piese:

    Dezactivat($produse["HBL-568"]);

    Dacă piesa HBL-568 nu este în stoc doar temporar și este de așteptat să sosească din fabrică, atunci este mai bine să faceți altfel:

    $produse["HBL-568"] = 0;

    Următorul punct de înțeles este că atunci când apelați o funcție unset() pentru un element de matrice, PHP ajustează matricea astfel încât bucla să funcționeze în continuare corect.

    Cu alte cuvinte, matricea nu este comprimată pentru a umple „găurile” rezultate. În esență, aceasta înseamnă că toate tablourile sunt asociative, chiar dacă par a fi numerice la prima vedere. Să ne uităm la exemple clare pentru a ilustra acest comportament:

    // Creați un tablou „numeric” $animals = array(„furnică”, „albină”, „pisica”, „câine”, „elk”, „vulpe”); print $animale; // Imprimă „bee” print $animale; // Afișează numărul de „pisici” ($animale); // Returnează 6 // unset() unset($animale); // Elimina un element $animals = "bee" print $animals; // Nu scoate nimic și dă o eroare E_NOTICE print $animals; // Afișează numărul de „pisici” ($animale); // Returnează 5 în timp ce elementul $array rămâne pe loc și conține "vulpe" // Adăugarea unui nou element $animals = "gnu"; // Adaugă un nou element print $animals; // Nu tipărește nimic, dă și o eroare E_NOTICE print $animals; // Imprimă numărul „gnu” ($animale); // Returnează 6 // Atribuirea "" (șir gol) $animals = ""; // Setat la "șir gol" print $animals; // Afișează „” count($animale); // Returnează 6, adică ia în considerare elementul de matrice gol la numărare

    Pentru a ajunge la o matrice numerică dens populată, utilizați funcția valori_matrice():

    $animale = array_values($animale);

    De asemenea, funcția array_splice() reindexează automat matricele pentru a elimina „găurile”:

    // Creați un tablou „numeric” $animals = array(„furnică”, „albină”, „pisica”, „câine”, „elk”, „vulpe”); array_splice($animale, 2, 2); print_r($animale);

    La ieșire obținem:

    Array ( => furnică => albină => elan => vulpe)

    Unde ar putea fi utilă această caracteristică?

    Să presupunem că lucrați cu o matrice ca coadă și doriți să eliminați elemente din această coadă fără a pierde posibilitatea de acces aleatoriu, când ați putea cădea accidental într-una dintre „găurile” rezultate.

    Și, în sfârșit, pentru a elimina în siguranță primul sau ultimul element dintr-o matrice, funcțiile array_shift()Și array_pop() respectiv.

    Totul este foarte simplu cu ele:

    $stack = array("portocaliu", "banana", "mar", "zmeura"); $fruct = array_shift($stiva); print_r($stiva);

    Ca rezultat al executării codului de mai sus, vom obține următoarea ieșire:

    Array ( => banane => mere => zmeura)

    Pentru a elimina ultimul element, utilizați funcția array_pop():

    $stack = array("portocaliu", "banana", "mar", "zmeura"); $fruct = array_pop($stiva); print_r($stiva);

    Ieșirea este următoarea imprimare matrice:

    Matrice ( => portocaliu => banană => măr)

    Asta e tot. Am discutat principalele puncte despre ștergerea elementelor matrice în PHP. Dacă se întâmplă ceva, documentația oficială este întotdeauna de ajutor.

    Ți-a plăcut materialul și vrei să-mi mulțumești?
    Distribuie doar prietenilor și colegilor tăi!


    Vezi si:

    Matricele PHP sunt folosite peste tot. Adăugarea și modificarea valorilor este de obicei simplă.

    Eliminarea elementelor de matrice este o operație specială. Puteți șterge pur și simplu elementul sau îl puteți șterge și utiliza. Această nuanță oferă oportunități grozave.

    Matrice PHP

    PHP este un limbaj de programare modern, funcționalitatea în ceea ce privește lucrul cu matrice este realizată la un nivel înalt. Programatorul are posibilitatea de a folosi matrice obișnuite și asociative, de a proiecta structuri de date multidimensionale și de a avea o valoare de orice tip ca elemente de matrice.

    Există un set dezvoltat de funcții pentru lucrul cu matrice și construcții sintactice speciale. Este posibil să traversați matricea folosind propriul algoritm și să vă atribuiți propriile funcții de procesare.

    Exemple de creare și utilizare a unei matrice

    Funcția scPrint este auxiliară. Scrie recursiv o matrice într-un șir de caractere pentru a demonstra rezultatele pe care le produce.

    Matricea $aFruits este creată în modul obișnuit: valorile sunt listate, indecșii sunt alocați automat de la zero. Ultima virgulă este irelevantă și nu creează un alt element gol.

    Matricea $aData este creată goală, apoi i se adaugă valori. Trei sunt automate, iar două sunt cu indici asociativi care nu afectează numerotarea globală a valorilor. Astfel, elementele „prune” și „piersică” au indicii „nou” și respectiv „proaspăt”.

    Matricea $aInfo este multidimensională și asociativă.

    Trei operațiuni de ștergere arată cum să eliminați un element dintr-o matrice PHP.

    Prima operație elimină cel de-al doilea element din tabloul $aFruits, indicele acestuia fiind 1. De remarcat că următorii indici nu sunt deplasați, ceea ce înseamnă că în operațiunile ciclice cu o astfel de matrice este necesar să se verifice existența elementului. .

    A doua operație șterge ultimul și primul elemente din matricea $aData, ceea ce confirmă că ștergerea nu afectează indecșii și posibilitatea de a șterge simultan mai multe elemente.

    Al treilea șterge o matrice dintr-o matrice și un element dintr-o matrice care face parte dintr-o altă matrice.

    Îndepărtarea normală a elementelor - nesetat

    Funcția de dezactivare este eliminată. Indiferent de situatie. Ar putea fi doar o variabilă sau un element de matrice. unset() este considerat a fi un operator de limbă, nu o funcție. Acest operator nu returnează nicio valoare și „distruge” ceea ce i se transmite ca parametri. Variabila sau matricea dispare ca și cum nu ar fi existat niciodată.

    În PHP, puteți elimina elementele de matrice goale în moduri diferite; de ​​fapt, ceea ce este considerat un element gol depinde de programator. Cu toate acestea, nu este foarte înțelept să folosiți mai mulți parametri în operatorul unset() în acest scop. Este mai practic să mutați operațiunile de grup în funcții de grup.

    Calculatoarele moderne sunt foarte rapide, iar PHP este foarte rapid. Dar acesta nu este un motiv pentru a crea și procesa tone de informații folosind algoritmi greoi; acesta este un motiv obiectiv pentru a aborda procesul de eliminare a elementelor de matrice în moduri progresive.

    Îndepărtarea elementelor folosind metodele cu șiruri

    În PHP, puteți elimina elementele de matrice goale în vrac, transformând matricea într-un șir și returnându-l înapoi. Dar acest caz este potrivit doar pentru elementele cu adevărat goale, indecșii lipsă sau în scopul reindexării unui tablou.

    Conceptul de element gol depinde de sarcină. Adesea, un element de matrice existent care conține anumite informații devine gol. De exemplu, o matrice înregistrează vizitatorii. Elementul matrice conține:

    • ora de sosire a vizitatorilor;
    • modul de funcționare curent;
    • pagina activă;
    • timpul ultimei acțiuni.

    Dacă diferența dintre ora sosirii și ora ultimei acțiuni este mai mare de 1 minut (sau altă valoare), putem presupune că clientul a părăsit site-ul. Înregistrările despre astfel de clienți pot fi șterse dacă sarcina este de a monitoriza lista de vizitatori activi și de a nu folosi metode mai avansate folosind JavaScript.

    Cu toate acestea, procesarea „linie” este bună. De exemplu, în PHP puteți elimina elementele de matrice duplicate astfel:

    Mod rapid și accesibil. Nu este necesar să folosiți simbolurile „[” și „]” pentru a desemna fiecare element, dar rețineți că atunci când transformați o matrice într-un șir, trebuie să vă asigurați că fiecare element este unic. Caracterele de încadrare trebuie alese pe baza caracterelor permise în element. O regulă de neclintit: fiecare element de matrice dintr-un rând este unic și își are locul (altfel nimic nu poate fi returnat înapoi).

    Această metodă este mai convenabilă atunci când sarcina în PHP este de a elimina un element de matrice după valoare. Puteți folosi funcția array_flip și schimbați valorile și cheile, apoi faceți o dezactivare clasică. Puteți utiliza funcția array_search și puteți găsi cheia valorii pe care doriți să o eliminați. Dar versiunea cu litere mici a soluției este mai clară și mai simplă.

    PHP practic nu limitează dezvoltatorul în nimic: nici în numărul de dimensiuni, nici în dimensiunile elementelor. Nu are rost să te implici în asta. Fiecare element ar trebui să aibă lungimea minimă posibilă, iar numărul de dimensiuni ar trebui să tinde spre unul.

    Dacă numărul de dimensiuni ale matricei este mai mare de trei, acesta este un motiv bun pentru a reconsidera decizia. Dacă un element de matrice are mai mult de 4000-8000 de caractere, ar trebui să apară îndoieli cu privire la caracterul rezonabil al imaginii de date construite.

    Această opinie nu provine din contextul funcționalității unei matrice PHP: eliminați un element, adăugați un obiect de alt tip, schimbați un lucru în ceva complet diferit. Simplitatea este cheia succesului nu numai în viață, ci și în algoritm. Programul ar trebui să funcționeze și să nu surprindă cu dimensiunile, dimensiunile și scara ideilor sale. Rezultatul contează, nu ideea cea mare.

    Ca limbaj de programare modern, PHP nu ignoră recursiunea și stiva. Este fundamental neimportant ce înseamnă programatorul când folosește funcția array_pop() în PHP: eliminați ultimul element al matricei sau pur și simplu introduceți-l într-o variabilă.

    Dar rețineți că, în acest context, funcția array_pop este o funcție push & pop, adică este un instrument de stivă, nu un instrument de ștergere.

    Aici se obișnuiește să se spună nu „șterge”, ci „extrage”. Semantica este semnificativ diferită. Cu toate acestea, funcția array_shift() în PHP - eliminarea primului element al unui tablou sau extragerea acestuia - are o conotație diferită. Tot aici elementul este preluat într-o variabilă externă și nu va fi în matrice, dar indicii sunt mutați.

    Când primul element este extras dintr-o matrice, toate elementele care îl urmează sunt deplasate înainte, dar numai indicii numerici se modifică; indicii litere mici rămân neschimbați.

    Ștergeți sau modificați: istoricul tranzacțiilor

    O variabilă este cu mult timp în urmă, o matrice este cu mult timp în urmă, un obiect este ieri. Încă se vorbește doar despre programarea orientată pe obiecte, dar nimic nu este folosit la întregul său potențial. Este un caz rar când soluțiile superficiale au devenit subiect de soluții entuziaste și sisteme de management de conținut (CMS) „înțelepte” cu mult „corp”.

    Regula obiectivă: nu cantitatea de cod contează, ci calitatea acestuia! Dar niciun CMS modern nu a respectat încă această regulă. Autorii săi cred că fac ceea ce trebuie și știu ce fac.

    Rezultat (trăsătură caracteristică): niciunul dintre CMS-ul modern nu se distinge printr-o „figură” decentă (suplețea și ușurința desenelor), toate au o imensă completitudine a codului, fiecare cere respect:

    • programator cu înaltă calificare;
    • necesită instalare;
    • impune cerințe de găzduire;
    • creează dificultăți la mutarea la o altă găzduire;
    • încetinește cu adevărat munca și administrarea.

    Programatorii au ajuns la conceptul de rollback de foarte mult timp; programarea modernă nu își poate imagina crearea de software fără două funcții:

    • Anula;
    • a reface.

    Nu este doar natura umană să greșească, ci în orice situație trebuie să existe o deplasare. În instrumentele moderne de programare pe Internet până în prezent, acest punct nu numai că nu contează, dar este și folosit la o scară foarte limitată.

    Operațiunile PHP pe o matrice: eliminarea unui element, schimbarea tipului acestuia sau adăugarea de ceva nou sunt clare. Dar înainte existau variabile, apoi matrice, apoi obiecte. Nu există un motiv să ne gândim la faptul că o matrice este doar o variabilă în timp?

    O matrice este o structură de date în timp. Nicio limbă până în prezent nu consideră timpul ca un factor în sintaxă. Nici măcar nu trebuie să vorbiți despre semantică: din cele mai vechi timpuri și până în zilele noastre, programatorii și utilizatorii înțeleg doar fișierele și folderele. Maximul la care a ajuns dezvoltarea, de exemplu, în PHP, spațiul de nume se reflectă trivial în structura folderelor și fișierelor.

    În acest context, acțiunile banale în PHP pe o matrice: eliminarea unui element, modificarea sau adăugarea - necesită acțiuni suplimentare din partea programatorului. Puteți lăsa totul așa cum este și va funcționa ca întotdeauna. Puteți lua în considerare fiecare operațiune asupra datelor și o puteți înregistra în întregime, puteți crea și stoca un istoric al operațiunilor.

    Acesta va fi un nivel de lucru complet diferit și o calitate radical mai bună a rezultatului.