PHP: αφαιρέστε το στοιχείο από τον πίνακα. Αφαίρεση στοιχείου σε πίνακα PHP

Αυτή η εργασίαμπορεί να λυθεί με διάφορους τρόπους.

Μέθοδος 1. Αντιγραφή σε άλλο πίνακα απλά όχι ακόμη και στοιχεία.

const N = 20; var a, b: πίνακας [1 .. N] ακέραιου αριθμού; i, m: byte; έναρξη τυχαιοποίησης? για i: = 1 έως N ξεκινήστε ένα [i]: = τυχαίο (40) + 10; γράφω (a [i]: 3); τέλος; γράφω; m: = 0; για i: = 1 έως N κάντε εάν ένα [i] mod 2<>0 και μετά αρχίζει m: = m + 1; b [m]: = a [i]; τέλος; για i: = 1 έως m αρχίστε να γράφετε (b [i]: 3); τέλος; γράφω; τέλος.

Αυτός είναι ο απλούστερος τρόπος για να αφαιρέσετε στοιχεία πίνακα (σε σε αυτήν την περίπτωσηζυγοί αριθμοί), αφού δεν υπάρχει ανάγκη συμπίεσης του αρχικού πίνακα. Στη λύση του προβλήματος που παρουσιάστηκε παραπάνω, η μεταβλητή m αποθηκεύει τον αριθμό των περιττών στοιχείων που βρέθηκαν και ταυτόχρονα, όταν συμπληρώνεται ο δεύτερος πίνακας, είναι ο μεταβαλλόμενος δείκτης των στοιχείων.

Μέθοδος 2. Διαγράψτε τα ζυγά στοιχεία στον τρέχοντα πίνακα, αντικαθιστώντας τα με περιττά προς τα δεξιά.

const N = 10; var a: πίνακας [1 .. N] ακέραιου αριθμού; i, k, m: byte; έναρξη τυχαιοποίησης? για i: = 1 έως N ξεκινήστε ένα [i]: = τυχαίο (40) + 10; γράφω (a [i]: 3) τέλος; γράφω; i: = 1; m: = N; καθώς εγώ<= m do if a[ i] mod 2 = 0 then begin m : = m- 1 ; for k: = i to m do a[ k] : = a[ k+ 1 ] ; end else i : = i+ 1 ; for i: = 1 to m do write (a[ i] : 3 ) ; writeln ; end .

Αυτός ο τρόπος επίλυσης του προβλήματος είναι πιο περίπλοκος. Εδώ, αν συναντηθεί ένα ζυγό στοιχείο, τότε ολόκληρο το υπόλοιπο του πίνακα μετατοπίζεται ένα κελί προς τα εμπρός. Σε αυτήν την περίπτωση, το άρτιο στοιχείο που βρέθηκε αντικαθίσταται. Η μεταβλητή m μειώνεται καθώς ο αριθμός των στοιχείων στον πίνακα γίνεται μικρότερος.

Αυτή η μέθοδος πρέπει να θεωρείται η πιο ορθολογική (ωστόσο, στο σχολικό μάθημα, οι ανοιχτοί πίνακες ενδέχεται να μην μελετώνται). Στις προηγούμενες εκδόσεις, μάλιστα, οι πίνακες δεν μειώθηκαν, μόνο ένα μέρος του πίνακα εμφανιζόταν στην οθόνη. Θα ήταν δυνατό απλώς να επαναλάβετε τον αρχικό πίνακα, να μην κάνετε τίποτα με αυτόν και να εμφανίσετε μόνο περίεργα στοιχεία στην οθόνη.

Ένας ανοιχτός πίνακας σάς επιτρέπει να αλλάξετε το μήκος του. Στη λύση του παρακάτω προβλήματος, αφού μετατοπιστούν τα περιττά στοιχεία και «αντικατασταθούν» τα περιττά, αλλάζει το μήκος του πίνακα (με τη διαδικασία της σταθερότητας). Ορίζει το νέο μήκος του πίνακα. Η ιδιαιτερότητα των ανοιχτών πινάκων στο Pascal είναι ότι η ευρετηρίασή τους ξεκινά από το μηδέν.

const N = 10; var a: πίνακας ακέραιων αριθμών; i, j, m: byte; έναρξη τυχαιοποίησης? SetLength (a, N); για i: = 0 έως N- 1 ξεκινάμε ένα [i]: = τυχαία (40) + 10; γράφω (a [i]: 3); τέλος; γράφω; i: = 0; // ευρετήριο του πρώτου στοιχείου m: = n- 1; // ευρετήριο του τελευταίουκαθώς εγώ<= m do if a[ i] mod 2 = 0 then begin for j : = i to m- 1 do a[ j] : = a[ j+ 1 ] ; m : = m - 1 end else i : = i + 1 ; SetLength(a, m+ 1 ) ; // το τελευταίο στοιχείο έχει δείκτη m, αλλά υπάρχουν m + 1 στοιχείαγια i: = 0 έως m γράψτε (a [i]: 3); γράφω; τέλος.

Ένα παράδειγμα εκτέλεσης του κώδικα προγράμματος.

Λειτουργίες για εργασία με πίνακες και λειτουργίες σε πίνακες (Μέρος 2)

Συγχώνευση συστοιχιών

Η συγχώνευση (σύνδεση) πινάκων είναι η λειτουργία δημιουργίας ενός πίνακα που αποτελείται από τα στοιχεία πολλών άλλων πινάκων. Η συγχώνευση συστοιχιών είναι μια πολύ επικίνδυνη λειτουργία, αφού το αποτέλεσμα της συγχώνευσης υπακούει στη δική του λογική, ξεχνώντας ποια μπορεί να χάσετε δεδομένα. Η συγχώνευση πινάκων υλοποιείται χρησιμοποιώντας το " + "ή χρησιμοποιώντας τη συνάρτηση Η συγχώνευση μπορεί να πραγματοποιηθεί μόνο με τη χρήση της συνάρτησης array_merge ().

Ας πούμε ότι έχουμε δύο πίνακες:

$ A = πίνακας ("1" => "Πρώτο", "2" => "Δεύτερο");
$ B = πίνακας ("3" => "Τρίτο", "4" => "Τέταρτο");

Τώρα ας συγχωνεύσουμε αυτούς τους δύο πίνακες σε έναν πίνακα $ Γ:

Χειριστής " + Το "δεν είναι ανταλλακτική για πίνακες. Αυτό σημαίνει ότι $ A + $ Bόχι ίσα $ B + $ A.

Ως αποτέλεσμα του εξεταζόμενου παραδείγματος, θα λάβουμε έναν πίνακα $ Γτης παρακάτω μορφής:

"1" => "Πρώτο", "2" => "Δεύτερο", "3" => "Τρίτο", "4" => "Τέταρτο"

Και ως αποτέλεσμα $ B + $ Aπαίρνουμε έναν πίνακα σαν αυτόν:

"3" => "Τρίτο", "4" => "Τέταρτο", "1" => "Πρώτο", "2" => "Δεύτερο"

Κατά τη συγχώνευση λιστών, αυτή η μέθοδος δεν λειτουργεί. Ας εξηγήσουμε αυτό το γεγονός με ένα παράδειγμα:

Ας πούμε ότι έχουμε δύο πίνακες:

$ A = πίνακας (10,11,12);
$ B = πίνακας (13,14,15);

Ως αποτέλεσμα συγχώνευσης λιστών $ Ακαι $ Β ($ A + $ B) παίρνουμε: 10,11,12. Και αυτό δεν είναι καθόλου το αποτέλεσμα που θέλαμε να πάρουμε ... Αυτό οφείλεται στο γεγονός ότι κατά τη συγχώνευση λιστών με τους ίδιους δείκτες, ένα στοιχείο του πρώτου πίνακα παραμένει στον πίνακα που προκύπτει και στην ίδια θέση. Σε αυτήν την περίπτωση, πρέπει να χρησιμοποιήσουμε τη συνάρτηση

Ένα παράδειγμα χρήσης της συνάρτησης μετρώ ():

$ arr = 5;
$ arr = 4;
$ arr = 8;
$ arr = 3;
$ arr = 8;
ηχώ "

Αριθμός στοιχείων πίνακα: "... καταμέτρηση ($ arr). "

" ;
// Έξοδοι: Αριθμός στοιχείων πίνακα: 5
?>

Αφαίρεση πίνακα και στοιχείων του

Εάν θέλετε να διαγράψετε έναν ολόκληρο πίνακα, χρησιμοποιήστε τη συνάρτηση απενεργοποίηση ().

Εάν θέλετε να αφαιρέσετε ένα ζεύγος κλειδιών/τιμών, μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση απενεργοποίηση ()... Ας δώσουμε συγκεκριμένα παραδείγματα:

$ arr = πίνακας (5 => 1, 12 => 2);

$ arr = 56; // Σε αυτό το σημείο του σεναρίου, αυτό είναι
// ισοδυναμεί με $ arr = 56;

$ arr ["x"] = 42; // Αυτό προσθέτει ένα νέο στον πίνακα
// στοιχείο με κλειδί "x"
Φόρουμ πύλης PHP. SU

Το Array είναι μια από τις πιο χρήσιμες και ευρέως χρησιμοποιούμενες δομές δεδομένων σε οποιαδήποτε γλώσσα προγραμματισμού. Είναι πολύ σημαντικό και χρήσιμο να μπορείτε να διαχειρίζεστε πίνακες και τα στοιχεία τους. Σε αυτό το άρθρο, θα δούμε πώς μπορείτε να αφαιρέσετε μεμονωμένα στοιχεία ενός πίνακα στην PHP.

Αυτή η εργασία μπορεί να υλοποιηθεί με διαφορετικούς τρόπους, ανάλογα με το τι γνωρίζουμε για το στοιχείο που αφαιρέθηκε - εάν το κλειδί (αριθμός ή αναγνωριστικό του στοιχείου στον πίνακα) είναι γνωστό ή μόνο η τιμή του.

Αφαίρεση στοιχείου σε πίνακα με το κλειδί του

Εάν γνωρίζετε το κλειδί του στοιχείου, τότε η εργασία είναι πολύ απλή. Λειτουργία απενεργοποίηση ()σας επιτρέπει να διαγράψετε ένα στοιχείο πίνακα ή οποιαδήποτε μεταβλητή (η μνήμη του υπολογιστή που χρησιμοποιείται για τη μεταβλητή θα διαγραφεί επίσης).

Για παράδειγμα, έχουμε έναν πίνακα:

$ myArr = πίνακας (1,2,3,4,5);

Για να αφαιρέσετε ένα στοιχείο με την τιμή "3" χρησιμοποιήστε τον ακόλουθο κωδικό:

unset ($ myArr);

Λάβετε υπόψη ότι δεν υποδεικνύεται η τιμή (3), αλλά το κλειδί του στοιχείου (2), ξεκινώντας, σε αυτήν την περίπτωση, από το 0. Έτσι, εάν πρέπει να διαγράψετε το πρώτο στοιχείο του πίνακα, τότε υποδεικνύουμε το μηδέν στοιχείο:

unset ($ myArr);

Αξίζει επίσης να λάβουμε υπόψη ότι μετά τις δύο διαγραφές μας, ο πίνακας περιέχει πλέον τρία στοιχεία:

Πίνακας
=> 2
=> 4
=> 5
)

Όλα τα κλειδιά των υπολοίπων στοιχείων διατηρούνται. Αντίστοιχα, εάν τώρα είναι απαραίτητο να διαγράψετε το πρώτο στοιχείο, τότε θα πρέπει να υποδείξετε ένα ως κλειδί. Επομένως, καθώς και επειδή δεν γνωρίζουμε πάντα τον αριθμό του στοιχείου στον πίνακα, αλλά μόνο την τιμή του, αυτή η επιλογή μπορεί να μην είναι κατάλληλη.

Αφαίρεση στοιχείου πίνακα ανά τιμή

Εάν το κλειδί του στοιχείου δεν είναι γνωστό, αλλά είναι γνωστή μόνο η τιμή του πίνακα, τότε θα πρέπει να επαναλάβετε όλα τα στοιχεία του πίνακα με ένα βρόχο και να διαγράψετε το επιθυμητό. Για παράδειγμα, ας αφαιρέσουμε το στοιχείο με την τιμή "3":

$ myArr = πίνακας (1,2,3,4,5);
foreach ($ myArr ως κλειδί $ => στοιχείο $) (
αν (στοιχείο $ == 3) (
unset ($ myArr [κλειδί $]);
}
}

* Σημειώστε ότι η συνθήκη ελέγχει την τιμή του πίνακα που είναι διαθέσιμη στον βρόχο στη μεταβλητή στοιχείου $ και κατά τη διαγραφή, καθορίζεται το κλειδί στοιχείου (μεταβλητή κλειδιού $).

Αυτός ο αλγόριθμος είναι επίσης κατάλληλος εάν πρέπει να διαγράψετε μια ομάδα στοιχείων ταυτόχρονα. Άλλωστε, υπάρχει μια συνθήκη που καθορίζει ποια στοιχεία θα διαγραφούν.

Αφαίρεση τεμνόμενων στοιχείων πίνακα

Ένα από τα χρήσιμα χαρακτηριστικά της PHP είναι η δυνατότητα λήψης ενός πίνακα από στοιχεία που δεν τέμνονται με στοιχεία άλλων πινάκων. Για αυτό, χρησιμοποιείται η συνάρτηση array_diff(). Λαμβάνει πίνακες ως παραμέτρους και επιστρέφει έναν νέο πίνακα. Για παράδειγμα, υπάρχει ένας αρχικός πίνακας $ myArr από τον οποίο χρειαζόμαστε μόνο στοιχεία που δεν περιλαμβάνονται στον πίνακα $ myArr2:

$ myArr = πίνακας (1,2,3,4,5);
$ myArr2 = πίνακας (3,4);

Με την εφαρμογή της συνάρτησης array_diff (), παίρνουμε έναν νέο πίνακα που περιέχει μόνο τα απαραίτητα στοιχεία:

$ resArr = array_diff ($ myArr, myArr2);

Ως αποτέλεσμα, το $ resArr θα περιέχει:

Πίνακας
=> 1
=> 2
=> 5
)

* Εδώ αξίζει να δώσετε προσοχή στο γεγονός ότι τα κλειδιά αποθηκεύονται κατά τη δημιουργία ενός νέου πίνακα. Επιπλέον, αξίζει να γνωρίζετε ότι η επιλογή προέρχεται μόνο από τον πρώτο πίνακα. Έτσι, εάν υπάρχουν άλλα μοναδικά στοιχεία στο $ myArr2, για παράδειγμα "6" ή "7", τότε αυτό δεν θα επηρεάσει με κανέναν τρόπο το αποτέλεσμα - δεν θα προστεθούν στον νέο πίνακα.

πέμπτη θέση - έκτη.

X [3]: = X [4];

X [4]: ​​= X [5];

X [5]: = X [6];

Έτσι, όλα τα στοιχεία από το τρίτο στο πέμπτο πρέπει να μετακινηθούν προς τα αριστερά κατά ένα - στη θέση του i -ου στοιχείου, πρέπει να γράψετε (i + 1) -th. Το μπλοκ διάγραμμα του αλγορίθμου φαίνεται στο Σχ. 5.25.


Ρύζι. 5.25.


Ρύζι. 5.26.


Ρύζι. 5.27.

Ας εξετάσουμε τώρα ένα γενικότερο πρόβλημα: είναι απαραίτητο να αφαιρέσουμε το m -ο στοιχείο από τον πίνακα X, που αποτελείται από n στοιχεία. Για να γίνει αυτό, αρκεί να γράψετε το στοιχείο (m + 1) -th στη θέση του στοιχείου με αριθμό m, (m + 2) -ο στοιχείο - στη θέση του (m + 1) -th, κ.λπ., n - ου στοιχείο - στη θέση (n – 1) ου. Η διαδικασία αφαίρεσης ενός στοιχείου από έναν πίνακα φαίνεται στο Σχ. 5.26.

Ο αλγόριθμος για την αφαίρεση ενός στοιχείου με αριθμό m από έναν πίνακα X με διάσταση n φαίνεται στο Σχ. 5.27.

Μετά την αφαίρεση του στοιχείου 4 Και στην πραγματικότητα, μετατοπίζοντας μέρος του πίνακα ένα στοιχείο προς τα αριστεράαπό τον πίνακα, ο αριθμός των στοιχείων του πίνακα θα αλλάξει (μειωθεί κατά ένα) και ο δείκτης μερικών από τα στοιχεία θα αλλάξει. Εάν ένα στοιχείο διαγραφεί, τότε το επόμενο έρχεται στη θέση του, δεν χρειάζεται να μετακινηθείτε σε αυτό (αυξάνοντας το ευρετήριο κατά ένα). Το ίδιο το επόμενο στοιχείο μετακινήθηκε προς τα αριστερά αφού αφαιρέθηκε.

Εάν υφίσταται επεξεργασία ένας πίνακας, στον οποίο ορισμένα από τα στοιχεία διαγράφονται, τότε μετά τη διαγραφή ενός στοιχείου δεν είναι απαραίτητο να μετακινηθείτε στον επόμενο (αυτό μειώνει τον αριθμό των στοιχείων). Εξετάστε το παρακάτω πρόβλημα ως παράδειγμα.

ΠΡΟΒΛΗΜΑ 5.1. Αφαιρέστε τα αρνητικά στοιχεία από τον πίνακα.

Ο αλγόριθμος για την επίλυση του προβλήματος είναι αρκετά απλός: επαναλαμβάνουμε όλα τα στοιχεία του πίνακα, εάν το στοιχείο είναι αρνητικό, τότε το διαγράφουμε μετατοπίζοντας όλα τα επόμενα κατά ένα προς τα αριστερά. Το μόνο πράγμα που αξίζει να θυμάστε είναι ότι μετά τη διαγραφή ενός στοιχείου, δεν χρειάζεται να μετακινηθείτε στο επόμενο για μεταγενέστερη επεξεργασία, αλλά το ίδιο μετακινείται στην τρέχουσα θέση. Το διάγραμμα ροής για την επίλυση του προβλήματος 5.1 φαίνεται στο Σχ. 5.28.

Ακολουθεί το κείμενο του προγράμματος με σχόλια.

πρόγραμμα upor_massiv; var i, n, j: byte; X: πίνακας [1 .. 100] πραγματικού; start writeln ('εισάγετε το μέγεθος του πίνακα'). readln (n); (Είσοδος πίνακα.) Για i: = 1 έως n αρχίστε να γράφετε ('X [', i, '] ='); readln (X [i]); τέλος; writeln («πίνακας X»); για i: = 1 έως n γράψτε (x [i]: 5: 2, ''); γράφω; i: = 1; καθώς εγώ<=n) do {Если очередной элемент массива X[i] отрицателен, то} if x [ i ]<0 then begin {удаляем элемент массива с номером i.} for j:= i to n_1 do x [ j ] : = x [ j + 1 ]; {Уменьшаем размер массива.} {Не надо переходить к следующему элементу массива.} n:=n -1; end else {Если элемент не удалялся, то переходим к следующему элементу массива.} i:= i +1; writeln (’Изменённый массив ’); for i:=1 to n do {Вывод преобразованного массива.} write (X[ i ] : 5: 2, ’ ’); writeln; end.


Ρύζι. 5.28.

Τα αποτελέσματα του προγράμματος φαίνονται στο Σχ. 5.29.


Ρύζι. 5.29.

5.9 Εισαγωγή στοιχείου σε πίνακα

Ας εξετάσουμε μια απλή εργασία: εισάγετε τον αριθμό b στον πίνακα X (10), μεταξύ του τρίτου και του τέταρτου στοιχείου.

Για να λυθεί αυτό το πρόβλημα, είναι απαραίτητο να μετατοπιστούν όλα τα στοιχεία του πίνακα, ξεκινώντας από το τέταρτο, προς τα δεξιά κατά ένα στοιχείο. Τότε το b (X: = b;) θα πρέπει να γραφτεί στο τέταρτο στοιχείο του πίνακα. Αλλά για να μην χάσετε τη διπλανή τιμή, πρέπει πρώτα να μετατοπίσετε το δέκατο στοιχείο ένα προς ένα, μετά το ένατο, όγδοο κ.λπ. στο τέταρτο. Το μπλοκ διάγραμμα του αλγόριθμου εισαγωγής φαίνεται στο Σχ. 5.30.


Ρύζι. 5.30.

Στη γενική περίπτωση, το μπλοκ διάγραμμα εισαγωγής του αριθμού b στον πίνακα X (N), μεταξύ των στοιχείων με αριθμό m και m + 1, φαίνεται στο Σχ. 5.31.


Ρύζι. 5.31.

Παρακάτω είναι ένα τμήμα προγράμματος που υλοποιεί αυτόν τον αλγόριθμο 5 Κατά την περιγραφή ενός πίνακα, είναι απαραίτητο να προβλεφθεί επαρκές μέγεθος για την εισαγωγή ενός στοιχείου. .

var i, n, m: byte; X: πίνακας [1 .. 100] πραγματικού; β: πραγματικό; αρχίστε να γράφετε ('N ='); readln (n); για i: = 1 έως n αρχίστε να γράφετε ('X [', i, '] ='); readln (X [i]); τέλος; writeln ('Array X'); για i: = 1 έως n γράψτε (x [i]: 5: 2, ''); γράφω; writeln ('m ='); readln (m); writeln ('b ='); readln (β); για i: = n μέχρι m + 1 έως x [i +1]: = x [i]; x: = b; n: = n + 1; writeln ('Τροποποιημένος πίνακας'); για i: = 1 έως n γράψτε (X [i]: 5: 2, ''); γράφω; τέλος.

5.10 Χρήση ρουτίνες για εργασία με πίνακες

Ας δούμε πώς μπορείτε να μεταβιβάσετε πίνακες σε μια υπορουτίνα. Όπως γνωρίζετε (βλ. Κεφάλαιο 4), για να δηλώσετε μεταβλητές στη λίστα τυπικών παραμέτρων μιας υπορουτίνας, πρέπει να καθορίσετε τα ονόματα και τους τύπους τους. Ωστόσο, ο τύπος οποιασδήποτε παραμέτρου στη λίστα μπορεί να είναι μόνο τυπικός ή προηγουμένως δηλωμένος τύπος. Επομένως, για να περάσετε έναν πίνακα σε μια υπορουτίνα, πρέπει πρώτα να περιγράψετε τον τύπο 6 του Τύπος δεδομένων πίνακα, δήλωση πίνακα βλέπε ενότητα 2.4.9. Η εργασία με πίνακες περιγράφεται λεπτομερώς σε αυτό το κεφάλαιο.και μετά δηλώστε τη διαδικασία:

πίνακας_τύπος = πίνακας[index_list] τουένα είδος;

διαδικασία

όνομα_διαδικασίας (όνομα_πίνακα: τύπος_πίνακα);

Για παράδειγμα:

τύπου vector = πίνακας [1 .. 10] byte; matrica = πίνακας [1 .. 3, 1 .. 3] του πραγματικού; διαδικασία proc (A: matrica; b: vector; var x: vector);

Είναι σαφές ότι περνώντας μια συμβολοσειρά της φόρμας

variable_name: σειρά[μήκος_γραμμής];

που είναι στην πραγματικότητα ο πίνακας 7 Τύπος δεδομένων "string", για δήλωση συμβολοσειράς βλέπε ενότητα 2.4.9, θα πρέπει να πραγματοποιηθεί με τον ίδιο τρόπο:

row_type = σειρά[μήκος_γραμμής];

διαδικασία

όνομα_διαδικασίας (όνομα_string: string_type);

Για παράδειγμα:

τύπος stroka_5 = συμβολοσειρά [5]; stroka_10 = συμβολοσειρά [1 0]; Function fun (S t r: stroka_5): stroka_10;

Οι πίνακες μπορούν να περάσουν σε μια υπορουτίνα χρησιμοποιώντας την έννοια του ανοιχτού πίνακα. Ένας ανοιχτός πίνακας είναι ο πίνακας 8 Ο τύπος δεδομένων "πίνακας", η δήλωση πίνακα, η πρόσβαση σε έναν πίνακα, βλέπε ενότητα 2.4.9., στην περιγραφή του οποίου αναφέρεται το είδος των στοιχείων από τα οποία αποτελείται, αλλά δεν καθορίζονται τα όρια της μεταβολής των δεικτών:

open_array_name: συστοιχία συστοιχίας...ένα είδος;

Για παράδειγμα:

var massiv_1: πίνακας πραγματικών; massiv_2: συστοιχία πίνακα char; massiv_3: πίνακας πίνακα πίνακα byte.

Εκχώρηση μνήμηςκαι προσδιορίζοντας τα όρια των δεικτών

35 Απαντήσεις

Υπάρχουν διάφοροι τρόποι για να αφαιρέσετε ένα στοιχείο από έναν πίνακα, μερικοί από τους οποίους είναι πιο χρήσιμοι για ορισμένες συγκεκριμένες εργασίες από άλλους.

Αφαιρέστε ένα στοιχείο ενός πίνακα

Εάν θέλετε να αφαιρέσετε μόνο ένα στοιχείο ενός πίνακα, μπορείτε να χρησιμοποιήσετε το \ unset () ή εναλλακτικά \ array_splice ().

Επίσης, εάν έχετε μια τιμή και δεν γνωρίζετε το κλειδί για να αφαιρέσετε ένα στοιχείο, μπορείτε να χρησιμοποιήσετε το \ array_search () για να λάβετε το κλειδί.

\ unset () μέθοδος

Λάβετε υπόψη ότι όταν χρησιμοποιείτε το \ unset () τα πλήκτρα πίνακα δεν θα αλλάξουν / δεν θα αναπροσαρμόσουν το ευρετήριο. Εάν θέλετε να επαναπροσδιορίσετε τα κλειδιά, μπορείτε να χρησιμοποιήσετε το \ array_values ​​() μετά το \ unset () που μετατρέπει όλα τα κλειδιά σε αριθμητικά πλήκτρα, ξεκινώντας από το 0.

Πίνακας $ = πίνακας (0, 1, 2, 3); unset (πίνακας $). $ array = array_values ​​· ($ array); var_dump (πίνακας $); / * πίνακας (3) (=> int (0) => int (1) => int (3)) * /

// Ο αρχικός μας πίνακας $ arr = πίνακας ("μπλε", "πράσινο", "κόκκινο", "κίτρινο", "πράσινο", "πορτοκαλί", "κίτρινο", "λουλακί", "κόκκινο"); print_r ($ arr); // Αφαιρέστε τα στοιχεία για τα οποία οι τιμές είναι κίτρινες ή κόκκινες $ arr = array_diff ($ arr, array ("κίτρινο", "κόκκινο")); print_r ($ arr);

Αυτό είναι το αποτέλεσμα από τον παραπάνω κώδικα:

Πίνακας (=> μπλε => πράσινο => κόκκινο => κίτρινο => πράσινο => πορτοκαλί => κίτρινο => λουλακί => κόκκινο) Πίνακας (=> μπλε => πράσινο => πράσινο => πορτοκαλί => λουλακί)

Τώρα το array_values ​​() θα αναπροσαρμόσει τον αριθμητικό πίνακα, αλλά θα αφαιρέσει όλες τις συμβολοσειρές κλειδιών από τον πίνακα και θα τις αντικαταστήσει με αριθμούς. Εάν πρέπει να διατηρήσετε τα ονόματα των κλειδιών (συμβολοσειρές) ή να αναπροσαρμόσετε το ευρετήριο του πίνακα εάν όλα τα κλειδιά είναι αριθμητικά, χρησιμοποιήστε το array_merge ():

$ arr = array_merge (array_diff ($ arr, array ("κίτρινο", "κόκκινο"))); print_r ($ arr);

Πίνακας (=> μπλε => πράσινο => πράσινο => πορτοκαλί => λουλακί)

Εάν έχετε έναν πίνακα αριθμητικών ευρετηρίων όπου όλες οι τιμές είναι μοναδικές (ή δεν είναι μοναδικές, αλλά θέλετε να διαγράψετε όλες τις παρουσίες μιας συγκεκριμένης τιμής), μπορείτε απλώς να χρησιμοποιήσετε το array_diff () για να αφαιρέσετε το αντίστοιχο στοιχείο, για παράδειγμα

$ my_array = array_diff ($ my_array, array ("Value_to_remove"));

Για παράδειγμα:

$ my_array = πίνακας ("Andy", "Bertha", "Charles", "Diana"); echo sizeof ($ my_array). "\ n"; $ my_array = array_diff ($ my_array, array ("Charles")); echo sizeof ($ my_array);

Εμφανίζεται το εξής:

Σε αυτό το παράδειγμα, το στοιχείο με την τιμή "Charles" αφαιρείται, όπως μπορεί να επαληθευτεί με κλήσεις στο sizeof (), οι οποίες αναφέρουν το μέγεθος 4 για τον αρχικό πίνακα και 3 μετά την αφαίρεση.

Καταστρέψτε ένα στοιχείο ενός πίνακα

απενεργοποίηση ()

$ array1 = πίνακας ("A", "B", "C", "D", "E"); unset ($ array1); // Διαγράψτε την τιμή του γνωστού δείκτη (2) από τον πίνακα var_dump ($ array1);

Η έξοδος θα είναι:

Πίνακας (4) (=> συμβολοσειρά (1) "A" => συμβολοσειρά (1) "Β" => συμβολοσειρά (1) "D" => συμβολοσειρά (1) "Ε")

Εάν χρειάζεται να δημιουργήσετε εκ νέου ευρετήριο του πίνακα:

$ array1 = array_values ​​· ($ array1); var_dump ($ array1);

Τότε η έξοδος θα είναι:

Πίνακας (4) (=> συμβολοσειρά (1) "A" => συμβολοσειρά (1) "Β" => συμβολοσειρά (1) "D" => συμβολοσειρά (1) "Ε")

Εξαγωγή στοιχείου από το τέλος ενός πίνακα- επιστρέψτε την τιμή του αφαιρεθέντος στοιχείου

mixed array_pop (πίνακας & πίνακας $)

$ στοίβα = συστοιχία ("πορτοκάλι", "μπανάνα", "μήλο", "βατόμουρο"); $ last_fruit = array_pop ($ stack); print_r (στοίβα $); print_r ("Last Fruit:". $ last_fruit); // Τελευταίο στοιχείο του πίνακα

Η έξοδος θα είναι

Array (=> πορτοκάλι => μπανάνα => μήλο) Τελευταίος καρπός: βατόμουρο

Αφαιρέστε το πρώτο στοιχείο (κόκκινο) από τον πίνακα, - επιστρέψτε την τιμή του αφαιρεθέντος στοιχείου

mixed array_shift (πίνακας & πίνακας $)

$ color = πίνακας ("a" => "κόκκινο", "b" => "πράσινο", "c" => "μπλε"); $ first_color = array_shift ($ color); print_r ($ έγχρωμο); print_r ("Πρώτο χρώμα:". $ first_color);

Η έξοδος θα είναι:

Πίνακας ([b] => πράσινο [c] => μπλε) Πρώτο Χρώμα: κόκκινο

Το unset () καταστρέφει τις καθορισμένες μεταβλητές.

Η συμπεριφορά του unset () μέσα σε μια συνάρτηση μπορεί να ποικίλλει ανάλογα με τον τύπο της μεταβλητής που προσπαθείτε να καταστρέψετε.

Εάν μια παγκοσμιοποιημένη μεταβλητή δεν έχει οριστεί () μέσα σε μια συνάρτηση, καταστρέφεται μόνο η τοπική μεταβλητή. Η μεταβλητή στο περιβάλλον κλήσης θα διατηρήσει την ίδια τιμή όπως πριν από την κλήση του unset ().

Η απάντηση του παραπάνω κώδικα θα ήταν μπαρ.

Για να καταργήσετε τη ρύθμιση () μιας καθολικής μεταβλητής μέσα σε μια συνάρτηση:

Για συσχετιστικούς πίνακες χρήση μη καθορισμένο :

$ arr = πίνακας ("a" => 1, "b" => 2, "c" => 3); unset ($ arr ["b"]); // ΑΠΟΤΕΛΕΣΜΑ: πίνακας ("a" => 1, "c" => 3)

Αριθμητικοί πίνακες

Για αριθμητικούς πίνακες χρησιμοποιήστε array_splice :

$ arr = πίνακας (1, 2, 3); array_splice ($ arr, 1, 1); // ΑΠΟΤΕΛΕΣΜΑ: πίνακας (0 => 1, 1 => 3)

Σημείωση

Εάν χρειάζεται να διαγράψετε πολλές τιμές σε έναν πίνακα και οι εγγραφές σε αυτόν τον πίνακα είναι αντικείμενα ή δομημένα δεδομένα, αυτό είναι το καλύτερο στοίχημά σας. Οι καταχωρήσεις που επιστρέφουν true από τη λειτουργία επανάκλησης θα αποθηκευτούν.

Πίνακας $ = [["x" => 1, "y" => 2, "z" => 3], ["x" => 2, "y" => 4, "z" => 6], ["x" => 3, "y" => 6, "z" => 9]]; $ αποτελέσματα = array_filter ($ array, function ($ value) (επιστρέφει τιμή $ ["x"]> 2;)); // => [["x" => 3, "y" => 6, z => "9"]]

Εάν πρέπει να αφαιρέσετε πολλά στοιχεία από έναν συσχετιστικό πίνακα, μπορείτε να χρησιμοποιήσετε το array_diff_key () (το array_flip () χρησιμοποιείται εδώ):

$ my_array = πίνακας ("key1" => "τιμή 1", "key2" => "τιμή 2", "key3" => "τιμή 3", "key4" => "τιμή 4", "κλειδί5" => "τιμή 5",); $ to_remove = πίνακας ("key2", "key4"); $ αποτέλεσμα = array_diff_key ($ my_array, array_flip ($ to_remove)); print_r ($ αποτέλεσμα);

Πίνακας (=> τιμή 1 => τιμή 3 => τιμή 5)

Ας υποθέσουμε ότι έχετε τον ακόλουθο πίνακα:

Πίνακας (=> 193 => 5)

Για να καταργήσετε την εκτέλεση αποθήκευσης:

Unset ($ χαρακτηριστικά ["αποθήκευση"]); $ ιδιότητες = array_filter ($ ιδιότητες);

Και παίρνετε:

Πίνακας (=> 193)

Θα ήθελα απλώς να πω ότι είχα ένα συγκεκριμένο αντικείμενο που είχε μεταβλητά χαρακτηριστικά (βασικά ήταν μια εμφάνιση πίνακα και άλλαζα στήλες στον πίνακα, επομένως τα χαρακτηριστικά στο αντικείμενο που αντικατοπτρίζει τον πίνακα θα μπορούσαν επίσης να αλλάξουν):

Κλάση obj (προστατευμένα πεδία $ = πίνακας ("field1", "field2"); προστατευμένο πεδίο $1 = πίνακας (); προστατευμένο πεδίο $2 = πίνακας (); προστατευμένα πεδία φόρτωσης () () // Αυτό θα φορτώσει τα πεδία $1 και $ field2 με σειρές δεδομένων για τη στήλη που περιγράφουν την προστατευμένη συνάρτηση clearFields ($ num) (foreach ($ πεδία ως πεδίο $) (unset ($ this -> $ field [$ num]); // Αυτό δεν λειτούργησε στην παρακάτω γραμμή λειτούργησε μη καθορισμένο ($ αυτό -> ($ πεδίο) [$ num]); // Πρέπει να επιλύσετε το πεδίο $ πρώτα χρησιμοποιώντας το ())))

Ο σκοπός των πεδίων $ ήταν απλός, επομένως δεν χρειάζεται να κοιτάξω πουθενά στον κώδικα όταν αλλάζουν, κοιτάζω μόνο την αρχή της τάξης και αλλάζω τη λίστα των χαρακτηριστικών και τα περιεχόμενα του πίνακα $ πεδίανα αντικατοπτρίζει τα νέα χαρακτηριστικά.

Ακολουθήστε τις προεπιλεγμένες λειτουργίες

$ Array = πίνακας ("test1", "test2", "test3", "test3"); unset ($ Array);

$ Array = πίνακας ("test1", "test2", "test3", "test3"); array_pop ($ Array);

$ Array = πίνακας ("test1", "test2", "test3", "test3"); array_splice ($ Array, 1,2);

$ Array = πίνακας ("test1", "test2", "test3", "test3"); array_shift ($ Array);

Αν και το unset () έχει αναφερθεί αρκετές φορές εδώ, θα πρέπει να αναφερθεί ότι το unset () δέχεται πολλές μεταβλητές, καθιστώντας εύκολη την αφαίρεση πολλών μη γειτονικών στοιχείων από έναν πίνακα σε μία μόνο λειτουργία:

// Διαγραφή πολλαπλών, μη συνεχόμενων στοιχείων από έναν πίνακα $ array = ["foo", "bar", "baz", "quz"]; unset ($ array, $ array); print_r (πίνακας $); // Έξοδος: ["foo", "bar"]

απενεργοποίηση () δυναμικά

Το unset () δεν δέχεται μια σειρά πλήκτρων για διαγραφή, επομένως ο παρακάτω κώδικας θα αποτύχει (αν και θα ήταν λίγο πιο εύκολο να χρησιμοποιηθεί το unset () δυναμικά).

Πίνακας $ = εύρος (0,5); $ αφαίρεση =; $ array = unset ($ remove); // ΑΠΟΤΥΧΙΑ: "απροσδόκητο" unset "" print_r ($ array);

Αντίθετα, το unset () μπορεί να χρησιμοποιηθεί δυναμικά σε έναν βρόχο foreach:

Πίνακας $ = εύρος (0,5); $ αφαίρεση =; foreach ($ remove as $ k => $ v) (unset ($ array [$ v]);) print_r ($ array); // Έξοδος: [0, 3, 4, 5]

Αφαιρέστε τα κλειδιά πίνακα αντιγράφοντας τον πίνακα

Υπάρχει επίσης μια άλλη πρακτική που δεν έχει αναφερθεί ακόμα. Μερικές φορές ο ευκολότερος τρόπος για να απαλλαγείτε από ορισμένα κλειδιά πίνακα είναι απλώς να αντιγράψετε το $ array1 στο $ array2.

$ array1 = εύρος (1,10); foreach ($ array1 ως $ v) (// Αφαιρέστε όλους τους ζυγούς ακέραιους αριθμούς από τον πίνακα εάν ($ v% 2) ($ array2 = $ v;)) print_r ($ array2); // Έξοδος: [1, 3, 5, 7, 9];

Προφανώς, η ίδια πρακτική ισχύει για τις συμβολοσειρές κειμένου:

$ array1 = ["foo", "_bar", "baz"]; foreach ($ array1 ως $ v) (// Αφαιρέστε όλες τις συμβολοσειρές που ξεκινούν με υπογράμμιση if (strpos ($ v, "_") === false) ($ array2 = $ v;)) print_r ($ array2); // Έξοδος: ["foo", "baz"]

Λύσεις:

  1. Για να αφαιρέσετε ένα στοιχείο, χρησιμοποιήστε unset ():
unset (πίνακας $). unset ($ array ["foo"]);
  1. Για να αφαιρέσετε πολλά μη συνεχόμενα στοιχεία, χρησιμοποιήστε επίσης το unset ():
unset ($ array, $ array); unset ($ array ["foo"], $ array ["bar"]);
  1. Για να αφαιρέσετε πολλά γειτονικά στοιχεία, χρησιμοποιήστε το array_splice ():
array_splice ($ array, $ offset, $ μήκος);

Περαιτέρω εξηγήσεις:

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

Εκτός από τη σύνταξη, υπάρχει μια λογική διαφορά μεταξύ της χρήσης unset () και της εκχώρησης ενός στοιχείου. Το πρώτο λέει ότι Αυτό δεν υπάρχει πια, και το δεύτερο λέει ότι Αυτό εξακολουθεί να υπάρχει, αλλά η τιμή του είναι η κενή συμβολοσειρά.

Εάν έχετε να κάνετε με αριθμούς, η καλύτερη επιλογή είναι το 0. Επομένως, εάν η εταιρεία σταματήσει την παραγωγή του γραναζιού XL1000, θα ενημερώσει το απόθεμά της:

Unset ($ προϊόντα ["XL1000"]);

Ωστόσο, εάν τελείωσαν προσωρινά τα γρανάζια XL1000, αλλά ήταν προγραμματισμένο να λάβετε μια νέα παρτίδα από το εργοστάσιο στο τέλος αυτής της εβδομάδας, αυτό είναι καλύτερο:

$ προϊόντα ["XL1000"] = 0; $ animals = array_values‎ ($ animals);

Κατάργηση στοιχείου πίνακα με βάση το κλειδί:

Χρησιμοποιήστε τη λειτουργία unset όπως φαίνεται παρακάτω:

$ a = πίνακας ("salam", "10", 1); unset ($ a); print_r ($ a); / * Έξοδος: Πίνακας (=> σαλάμ => 1) * /

Κατάργηση στοιχείου πίνακα με βάση την τιμή:

Χρησιμοποιήστε τη συνάρτηση array_search για να λάβετε το κλειδί ενός στοιχείου και χρησιμοποιήστε την παραπάνω μέθοδο για να αφαιρέσετε ένα στοιχείο πίνακα όπως φαίνεται παρακάτω:

$ a = πίνακας ("salam", "10", 1); $ κλειδί = array_search (10, $ a); if ($ key! == false) (unset ($ a [$ key]);) print_r ($ a); / * Έξοδος: Πίνακας (=> σαλάμ => 1) * /

Δημιουργήστε τον πίνακα σας στη μεταβλητή του πίνακα $ και, στη συνέχεια, όπου έβαλα "το στοιχείο που θέλετε να αφαιρέσετε" βάζετε κάτι σαν: "a". Και αν θέλετε να διαγράψετε πολλά, τότε: "a", "b".

Συνεχίζοντας το θέμα:
Smartphone

Για να διανείμετε Wi-Fi, απλά πρέπει να κάνετε λήψη του Virtual Router Plus στα ρωσικά και να το εγκαταστήσετε ως διανομέας Διαδικτύου. Κατεβάστε και δοκιμάστε τη σταθερή έκδοση αυτού...