Cum să eliminați elementul de matrice pe baza numelui cheii în PHP? (Programare, Php, Array-Uri, Bucle, Foreach)

Alan Kis a intrebat.

Vreau să fac o buclă printr-o matrice cu foreach pentru a verifica dacă există un nume de cheie. Dacă cheia cu acel nume există, vreau să șterg elementul de array care o conține.

Am scris următorul cod, care, în prima condiție, verifică valoarea elementului din array, iar dacă valoarea elementului din array este egală cu un șir de caractere gol „”, setează valoarea elementului de tablou respectiv la „-„ (caracter liniuță). Prima condiție funcționează bine.

foreach ($domaindata['administrative'] as $key => $value) {
    if ($value == "") {
      $value = "-";
    } 
    else if ($key == "type") {
      unset ($domaindata[$key]);
    }
    echo "<b>$key: </b>$value<br>";
}

Acum am adăugat o a doua condiție care verifică dacă numele $key există și, dacă există, elimină elementul din tablou.

Aceasta este else if parte, dar acel element din tablou este totuși afișat.

else if ($key == "type") {
      unset ($domaindata[$key]);
    }

Structura tabloului este următoarea:

Array
(
    [name] => OWNER NAME
    [address] => OWNER ADDRESS
    [post:number] => OWNER POST OFFICE NUMBER
    [city] => OWNER CITY
    [country] => OWNER COUNTRY CODE
    [telephone] => OWNER TELEPHONE NUMBER
    [fax] => OWNER FAX NUMBER                   // could be empty
    [email] => OWNER EMAIL ADDRESS
    [type] => person
    [user:type] => Fizička osoba
)

Comentarii

  • Cu excepția cazului în care nu atribuiți $value pe $key din nou, nu se va schimba. O modalitate ușoară este să faci $key => &$value apoi, de fiecare dată când scrieți $value = "-" se va modifica matricea pe loc. Executați un unset la finalul foreach pentru a șterge variabila –  > Por Bankzilla.
2 răspunsuri
Machavity

Faci un foreach pe $domaindata['administrative'], , nu $domaindata. Deci, pentru a dezactiva trebuie să faceți

unset($domaindata['administrative'][$key]);

În ceea ce privește motivul pentru care buclă dvs. este încă arată type este pentru că unset nu afectează bucla (ați făcut deja o copie în variabilele buclei). Ceea ce v-aș sugera este să faceți acest lucru înainte ca foreach bucla

if(isset($domaindata['administrative']['type'])) unset($domaindata['administrative']['type']);

Puteți apoi să eliminați elseif în întregime (ceea ce va elimina o parte din costurile suplimentare)

Comentarii

  • Cred că starea mea nu evaluează pe else if ($key == „type”), , deoarece elementul din matrice este încă prezent, –  > Por Alan Kis.
  • @AlanKis Mi-am actualizat răspunsul pentru a vă ajuta să rezolvați această problemă.  > Por Machavity.
Mureinik

Sunteți iterați peste $domaindata['administrative'], , nu $domaindata. Prin urmare, ar trebui, de asemenea, să unset elementul din el:

else if ($key == "type") {
  unset ($domaindata['administrative'][$key]);
}