PHP Λάβετε τις ελάχιστες και μέγιστες τιμές σε έναν δισδιάστατο συσχετιστικό πίνακα. Min - Βρίσκει τη μικρότερη τιμή Php τον αριθμό των ελάχιστων τιμών στον πίνακα
(PHP 4, PHP 5, PHP 7)
min — Βρίσκει τη μικρότερη τιμή
Περιγραφή
Εάν διαβιβαστεί μόνο ένα όρισμα - ένας πίνακας αριθμών, min()επιστρέφει το μικρότερο από αυτά. Εάν το πρώτο όρισμα είναι ακέραιος ή float, τότε πρέπει να υπάρχει τουλάχιστον ένα ακόμη. Σε αυτή την περίπτωση η συνάρτηση min()θα επιστρέψει το μικρότερο από αυτά.
Σχόλιο:
Οι τιμές διαφορετικών τύπων συγκρίνονται χρησιμοποιώντας τυπικούς κανόνες σύγκρισης. Για παράδειγμα, μια μη αριθμητική συμβολοσειρά ( σειρά) θα συγκριθεί με έναν ακέραιο ( ακέραιος αριθμός) σαν να ήταν ίσο 0 , αλλά πολλές γραμμές ( σειρά) θα συγκριθούν αλφαβητικά. Η τιμή επιστροφής θα διατηρήσει τον αρχικό τύπο της μεταβλητής, χωρίς μετατροπή.
Επιστρεφόμενες τιμές
Λειτουργία min()επιστρέφει την τιμή της παραμέτρου που θεωρείται η "μικρότερη" σύμφωνα με τους τυπικούς κανόνες σύγκρισης. Εάν πολλές τιμές διαφορετικών τύπων είναι ίσες μεταξύ τους (δηλ. 0 Και "αλφάβητο"), τότε το πρώτο θα επιστραφεί.
Παραδείγματα
Παράδειγμα #1 Παράδειγμα χρήσης min()
ηχώ min(2, 3, 1, 6, 7); // 1
echo min (πίνακας(2, 4, 5)); // 2
// Η συμβολοσειρά "hello", σε σύγκριση με το int, αντιμετωπίζεται ως 0
// Δεδομένου ότι και οι δύο τιμές είναι ίσες, η σειρά των παραμέτρων καθορίζει το αποτέλεσμα
echo min(0, "γεια"); // 0
echo min ("γεια" , 0 ); // Γειά σου
// Εδώ συγκρίνουμε -1< 0, поэтому -1 является наименьшим значением
echo min ("γεια" , - 1 ); // -1
// Όταν συγκρίνετε πίνακες διαφορετικού μήκους, το min θα επιστρέψει τον μικρότερο
$val = min (πίνακας(2 , 2 , 2 ), πίνακας (1 , 1 , 1 , 1 )); // πίνακας(2, 2, 2)
// Συγκρίνονται πολλαπλοί πίνακες ίδιου μήκους από αριστερά προς τα δεξιά
// για αυτό το παράδειγμα: 2 == 2, αλλά 4< 5
$val = min (πίνακας(2 , 4 , 8 ), πίνακας (2 , 5 , 1 )); // πίνακας(2, 4, 8)
// Εάν ένας πίνακας και ένας μη πίνακας συγκριθούν, ο πίνακας δεν θα επιστραφεί ποτέ
// αφού οι πίνακες θεωρούνται μεγαλύτεροι από όλες τις άλλες τιμές
$val = min ("string" , array(2 , 5 , 7 ), 42 ); //σειρά
// Εάν ένα όρισμα είναι NULL ή boolean, θα συγκριθεί με τα άλλα
// χρησιμοποιώντας τον κανόνα FALSE< TRUE, учитывая остальные типы аргументов
// Στο παράδειγμα που δίνεται, το -10 και το 10 αντιμετωπίζονται ως TRUE
$val = min (- 10 , FALSE , 10 ); // ΛΑΘΟΣ
$val = min (- 10 , NULL , 10 ); // ΜΗΔΕΝΙΚΟ
// από την άλλη πλευρά, το 0 αντιμετωπίζεται ως FALSE, επομένως είναι "λιγότερο" από TRUE
$val = min(0, TRUE); // 0
?>
Οι πίνακες είναι ένας από τους βολικούς δομημένους τρόπους αποθήκευσης πληροφοριών. Κάθε στοιχείο ενός τέτοιου πίνακα έχει τη δική του θέση, το δικό του κλειδί και αξία. Τα περιεχόμενα των πινάκων μπορεί να είναι διαφορετικά, όπως, για παράδειγμα, μια βάση δεδομένων με αριθμούς, ονόματα ή απλές αριθμητικές τιμές. Μιλώντας για αριθμούς, μπορεί να βρεθούμε αντιμέτωποι με διάφορα είδη εργασιών, για παράδειγμα, συναγωγή της μέγιστης ή της ελάχιστης τιμής. Σήμερα θα μιλήσουμε για το πώς αυτό λύνεται σε διάφορες γλώσσες προγραμματισμού.
Εύρεση της μεγαλύτερης και της μικρότερης τιμής ενός μονοδιάστατου πίνακα στην PHP
Όλοι οι πίνακες διαφέρουν ως προς τη δομή τους. Εξετάστε δύο απλούς μονοδιάστατους πίνακες, ο ένας από τους οποίους δεν περιέχει κλειδιά:
$my_array = πίνακας(22, 24, 37, 74, 23, 2, 10);
και ένα πανομοιότυπο με το προηγούμενο, αλλά με κλειδιά:
$my_array = πίνακας(1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);
Ας προσπαθήσουμε να εμφανίσουμε τις μέγιστες και ελάχιστες τιμές αυτού του πίνακα. Για να το κάνουμε αυτό θα χρησιμοποιήσουμε τυπικές συναρτήσεις " Μέγιστη" Και " ελάχ"αντίστοιχα:
Echo max($my_array); // Εκτύπωση 74 echo min($my_array); // Εκτύπωση 2
Αν ρίξουμε μια πιο προσεκτική ματιά στον δεύτερο πίνακα, τότε ως αποτέλεσμα μπορούμε να πάρουμε το κλειδί των μέγιστων ή ελάχιστων τιμών.
Χρησιμοποιώντας έναν πίνακα ως παράδειγμα
$my_array = πίνακας(1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);
θα μοιάζει με αυτό:
$max = array_keys($my_array, max($my_array)); $max = $max;// Κλειδί μέγιστης τιμής $min = array_keys($my_array, min($my_array)); $min = $min; // Κλειδί ελάχιστης τιμής echo $max; // Εκτυπώστε το αποτέλεσμα της μέγιστης τιμής
Κατά συνέπεια, το κλειδί μέγιστης τιμής είναι "4" και η ελάχιστη τιμή είναι "6".
Εύρεση της μεγαλύτερης και της μικρότερης τιμής ενός πολυδιάστατου πίνακα στην PHP
Οι πολυδιάστατοι πίνακες διακρίνονται από την ένωσή τους. Για παράδειγμα, ένας δισδιάστατος πίνακας θα μοιάζει με αυτό χωρίς τα πλήκτρα:
$my_array = array(array(22, 24, 37), array(74, 23, 2), array(10));
Και, κατά συνέπεια, με ορισμένα κλειδιά:
$my_array = array(array(1 => 22, 2 => 24, 3 => 37), array(4 => 74, 5 => 23, 6 => 2), array(7 => 10));
Σε αυτή την περίπτωση, η εύρεση των μέγιστων και ελάχιστων τιμών είναι λίγο δύσκολη, αλλά και δυνατή.
Αρχικά, για να βρούμε το μέγιστο και το ελάχιστο εδώ, μετατρέπουμε τον πίνακα σε μονοδιάστατο:
$out_array = array(); foreach($my_array ως $sub_array) ( $out_array = array_merge ($out_array, $sub_array); )
Ο σχεδιασμός λειτουργεί και για τις δύο παραπάνω επιλογές. Και στη συνέχεια, ακολουθώντας το παράδειγμα ενός μονοδιάστατου πίνακα, θα εμφανίσουμε τα δεδομένα που χρειαζόμαστε:
Echo max($out_array); // Εκτύπωση 74 echo min($out_array); // Εκτύπωση 2
Ως μικρό μπόνους, θα δώσω ένα παράδειγμα ενός άλλου δημοφιλούς δισδιάστατου πίνακα:
$my_array = array(array("id" => "1", "date" => "2018-03-19", "price" => "5",), πίνακας ("id" => "2" , "date" => "2018-03-19", "price" => "50",), πίνακας ("id" => "3", "date" => "2018-03-19", " τιμή" => "25"));
Λέγοντας δημοτικότητα δεν εννοώ το περιεχόμενο, αλλά ένα παράδειγμα της δομής του. Ας πούμε ότι εδώ πρέπει να εξάγετε τις μέγιστες και ελάχιστες τιμές μόνο των κλειδιών "τιμής".
Το πρώτο πράγμα που χρειάζεστε σε αυτήν την περίπτωση είναι να αποκτήσετε έναν νέο πίνακα με μόνο αυτά τα δεδομένα:
$numbers = array_column($my_array, "price");
Echo min($numbers); // Εκτύπωση 5 echo max($numbers); // Εκτύπωση 50
Αυτό ολοκληρώνει την εργασία με πίνακες στην PHP. Εάν ξαφνικά η δομή του πίνακα σας είναι διαφορετική και δεν ξέρετε πώς να το επεξεργαστείτε, κάντε την κατάλληλη ερώτηση στα σχόλια, θα προσπαθήσω να σας βοηθήσω.
Εύρεση της μεγαλύτερης και της μικρότερης τιμής ενός μονοδιάστατου πίνακα σε JavaScript
Σε αντίθεση με την PHP, ο τύπος των πινάκων στο JavaScript είναι πολύ πιο απλός και ένας απλός μονοδιάστατος πίνακας θα μοιάζει με αυτό:
Var my_array = ;
Εδώ δεν αναφέρονται ευρετήρια. Για να βρούμε τις μέγιστες και ελάχιστες τιμές σε αυτόν τον πίνακα, θα γράψουμε δύο δικές μας απλές συναρτήσεις:
Συνάρτηση arrayMax(array) ( return array.reduce(function(a, b) ( return Math.max(a, b); )); ) συνάρτηση arrayMin(array) ( return array.reduce(function(a, b) ( επιστροφή Math.min(a, b); )); )
που χρησιμοποιούνται για να βρούμε τις τιμές που χρειαζόμαστε. Η χρήση είναι επίσης απλή:
Ειδοποίηση(arrayMax(my_array)); // Εκτύπωση 74 alert(arrayMin(my_array)); // Εκτύπωση 2
Σε αυτήν την περίπτωση, οι αριθμοί "2" και "74" θα εμφανιστούν στην οθόνη ως οι ελάχιστες και μέγιστες τιμές του πίνακα.
Εύρεση της μεγαλύτερης και της μικρότερης τιμής ενός πολυδιάστατου πίνακα σε JavaScript
Οι πολυδιάστατοι πίνακες στο JavaScript είναι εξίσου απλοί και μοιάζουν με αυτό:
Var my_array = [ , , ];
Ας προσπαθήσουμε να βρούμε το μέγιστο και το ελάχιστο εδώ. Αρχικά, θα γράψουμε μια συνάρτηση με την οποία, σύμφωνα με το σχήμα που γνωρίζουμε ήδη, θα αναπαραστήσουμε αυτόν τον πίνακα ως μονοδιάστατο:
Var out_array = ; my_array.forEach(function(v) ( Array.prototype.push.apply(out_array, v); ));
Και χρησιμοποιώντας το αντικείμενο " Μαθηματικά«Παίρνουμε τις αξίες που χρειαζόμαστε:
Var min = Math.min.apply(null, out_array); // Πάρτε 2 var max = Math.max.apply(null, out_array); // Λήψη ειδοποίησης 74 (μέγ.); // Εκτύπωση 74 στην οθόνη
Στην πραγματικότητα, αντί για το αντικείμενο " Μαθηματικά«Μπορείτε να χρησιμοποιήσετε τις λειτουργίες μας που χρησιμοποιούνται στην έκδοση με έναν μονοδιάστατο πίνακα, αλλά για να καταλάβετε ότι οποιοδήποτε πρόβλημα μπορεί να λυθεί με πολλούς τρόπους - εδώ έχω δώσει μια ελαφρώς διαφορετική λύση.
Λοιπόν, σύμφωνα με την παράδοση - ένα μικρό μπόνους. Ας εξετάσουμε έναν άλλο πολυδιάστατο πίνακα με την ακόλουθη δομή:
Var my_array = [["One", "2018-03-19", 5], ["Two", "2018-03-19", 50], ["Three", "2018-03-19", 25 ], ];
Όπως μπορούμε να δούμε, οι αριθμητικές τιμές σε κάθε πίνακα βρίσκονται στην τρίτη θέση. Ας γράψουμε λίγο κώδικα και ας πάρουμε τις αντίστοιχες τιμές μόνο από αυτά τα δεδομένα:
Var min = +Άπειρο; var max = -Άπειρο; my_array.forEach(function(item) (if(+item< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >max) ( max =+ item; // Αναζήτηση για τη μέγιστη τιμή ) )); alert(min+" "+max); // Εμφάνιση του αποτελέσματος στην οθόνη
Αυτό είναι όλο. Μην ξεχάσετε να υποστηρίξετε το έργο. Πολλά ενδιαφέροντα πράγματα σας περιμένουν μπροστά!
Έχω έναν πίνακα σε αυτή τη μορφή:
Πίνακας ( => Πίνακας ( => 117 => Δικτύωση => 16) => Πίνακας ( => 188 => FTP => 23) => Πίνακας ( => 189 => Διαδίκτυο => 48))
Υπάρχει καλός τρόπος για να λάβετε τις ελάχιστες και μέγιστες τιμές του "count"; Θα μπορούσα να το κάνω αυτό χρησιμοποιώντας πολλαπλούς βρόχους, αλλά σκέφτηκα ότι μπορεί να υπάρχει καλύτερος τρόπος.
Σε αντίθεση με άλλες, δεν μπορείτε να χρησιμοποιήσετε τις συναρτήσεις min() / max() για αυτό το πρόβλημα, καθώς αυτές οι συναρτήσεις δεν κατανοούν τους πίνακες δεδομένων (πίνακας) που τους μεταβιβάστηκαν. Αυτές οι συναρτήσεις λειτουργούν μόνο για στοιχεία βαθμωτών πίνακα.
ΑΡΧΗ ΕΙΚΟΝΑΣ
Ο λόγος για τον οποίο η χρήση των min() και max() φαίνεται να δίνει τη σωστή απάντηση είναι επειδή οι πίνακες μεταφέρουν τύπους σε ακέραιους αριθμούς, κάτι που είναι απροσδιόριστη συμπεριφορά:
Η συμπεριφορά μετατροπής σε ακέραιο δεν έχει οριστεί για άλλους τύπους. Μην βασίζεστε σε καμία παρατηρούμενη συμπεριφορά καθώς μπορεί να αλλάξει χωρίς προειδοποίηση.
Η παραπάνω δήλωσή μου σχετικά με το type-casting ήταν λάθος. Στην πραγματικότητα οι min() και max() λειτουργούν με πίνακες, αλλά όχι με τον τρόπο που τους χρειάζεται το OP για να λειτουργήσουν. Όταν χρησιμοποιείτε min() και max() με πολλαπλούς πίνακες ή έναν πίνακα στοιχείων πίνακα, συγκρίνετε στοιχεία στοιχείο προς στοιχείο από αριστερά προς τα δεξιά:
$val = min(πίνακας(2, 4, 8), πίνακας(2, 5, 1)); // array(2, 4, 8) /* * πρώτο στοιχείο σε σύγκριση με το πρώτο στοιχείο: 2 == 2 * δεύτερο στοιχείο σε σύγκριση με το δεύτερο στοιχείο: 4< 5 * first array is considered the min and is returned */
Μεταφρασμένο στο πρόβλημα, το OP δείχνει γιατί η απευθείας χρήση των min() και max() φαίνεται να δίνει το σωστό αποτέλεσμα. Τα πρώτα στοιχεία του πίνακα είναι id , οπότε η min() και η max() τα συγκρίνουν πρώτα, παρεμπιπτόντως, οδηγώντας στο σωστό αποτέλεσμα, επειδή το χαμηλότερο id είναι αυτό που έχει το μικρότερο πλήθος και το υψηλότερο id είναι αυτό που έχει τον υψηλότερο αριθμό.
ΤΕΛΟΣ ΕΠΕΞΕΡΓΑΣΙΑΣ
Ο σωστός τρόπος είναι να χρησιμοποιήσετε έναν βρόχο.
$a = array(array("id" => 117, "name" => "Networking", "count" => 16), array("id" => 188, "name" => "FTP", " count" => 23), array("id" => 189, "name" => "Internet", "count" => 48)); $min = PHP_INT_MAX; $max = 0; foreach ($a ως $i) ( $min = min($min, $i["count"]); $max = max($max, $i["count"]);
Μπορείτε να χρησιμοποιήσετε τις συναρτήσεις max() και min().
Τι κάνατε με πολλαπλούς βρόχους; Ενα είναι αρκετό :)
- Λάβετε το πρώτο στοιχείο μετρώντας το πλήθος των $min και του max
- επαναλάβετε τα υπόλοιπα, συγκρίνετε το πλήθος με κάθε $min και $max, εάν μικρότερο/μεγαλύτερο αντιστοιχίστε μια νέα τιμή μέτρησης
Μπορείτε να χρησιμοποιήσετε τις συναρτήσεις max/min καθώς θα επιστρέψουν έναν πίνακα που περιέχει το μέγιστο/ελάχιστο κάθε ευρετηρίου. Το παράδειγμά σας θα πρέπει να επιστρέψει τον πίνακα (189, "Δικτύωση", 48) για μέγ. Στη συνέχεια, μπορείτε να πάρετε το σκορ από αυτόν τον πίνακα.
Η ενημέρωση αυτού δεν λειτουργεί όπως απέκλεισα. Το παράδειγμα σελίδας man είναι παραπλανητικό και το παράδειγμα δίνει το σωστό αποτέλεσμα χρησιμοποιώντας το μέγιστο, αλλά αυτό είναι απλώς μια σύμπτωση.
Φαίνεται ότι δεν μπορείτε να χρησιμοποιήσετε τη max() σε έναν πίνακα 2D. Απλώς επιστρέφει τον μεγαλύτερο πίνακα, αντί για το max() κάθε ευρετηρίου (όπως αναφέρεται σε πολλές απαντήσεις).
$count = array(); foreach($arr ως $_arr) ( $count = $_arr["count"]; ) var_dump(max($count), min($count));
Υπάρχει αντίστοιχο ενσωματωμένολειτουργία για αυτό; (ακόμα και χωρίς δυνατότητα δοκιμές)
/** * ανακτά μια στήλη από έναν πίνακα 2D με μια προαιρετική επιλογή σε μια άλλη στήλη * * @param $ aArray για ανάκτηση από * @param $ aColName όνομα της στήλης προς ανάκτηση, π.χ. "O_NAME" * @param $aColTest (προαιρετικό) όνομα στήλης για την εκτέλεση της δοκιμής, π.χ. "O_ID" * @param $aTest (προαιρετική) συμβολοσειρά για δοκιμή π.χ. ">=10", "== "". $Toto. "" " * @return πίνακα 1D με εξαγωγή μόνο τη στήλη * @access public * / συνάρτηση extractColFromArray ($aArray, $aColName, $aColTest = "", $ aTest = "") ( $mRes = array()); foreach ($aArray ως $σειρά) ( if (($aColTest == "") || (eval("return". $row[$aColTest]. $ aTest. ";"))) ( $ mRes = $ row [ $ aColName]; ) ) επιστροφή $ mRes; ) // extractColFromArray