rafinos Δημοσ. 8 Ιουλίου 2014 Δημοσ. 8 Ιουλίου 2014 Γεια σας παιδιά! Θέλω να τσεκάρω αν σε ένα array της javascript υπάρχουν διπλότυπα (δύο φορές η ίδια τιμή) και αν ναι να εμφανίσω τις τιμές που υπάρχουν παραπάνω από μία φορές.... Για παράδειγμα αν στον πίνακα έχω array("4","4","1","2","5","1","4")... Να εμφανιστούν το 4 και το 5 ... Ξέρει κανείς κάποιο τρόπο (και με jquery δεν υπάρχει θέμα).
StathisG Δημοσ. 8 Ιουλίου 2014 Δημοσ. 8 Ιουλίου 2014 Αν θες να αφαιρέσεις τα duplicates, τότε δες την unique. Αν θες απλά να τα εμφανίσεις (επιλέξεις) έχει διάφορους τρόπους. Δες ένα παράδειγμα εδώ.
rafinos Δημοσ. 8 Ιουλίου 2014 Μέλος Δημοσ. 8 Ιουλίου 2014 Βασικά περνάω την τιμή από μια λίστα με textboxes στον πίνακα για να τσεκάρω αν προσπαθεί να στείλει ο χρήστης δύο φορές την ίδια εγγραφή ... ώστε να μην τον αφήσω
StathisG Δημοσ. 8 Ιουλίου 2014 Δημοσ. 8 Ιουλίου 2014 Τότε μπορείς να χρησιμοποιήσεις την inArray. Αν η τιμή που ελέγχεις υπάρχει στον πίνακα θα σου επιστρέψει το index της, αλλιώς θα σου επιστρέψει -1, για παράδειγμα: var testArray = ['value1', 'value2', 'value4']; $.inArray('value1', testArray) //επιστρέφει 0 $.inArray('value2', testArray) //επιστρέφει 1 $.inArray('value3', testArray) //επιστρέφει -1 $.inArray('value4', testArray) //επιστρέφει 2
rafinos Δημοσ. 8 Ιουλίου 2014 Μέλος Δημοσ. 8 Ιουλίου 2014 Πιθανότατα θα το κάνω με τον πρώτο τρόπο... βολεύει περισσότερο έτσι όπως τα έχω δομημένα! Ευχαριστώ πολύ!
rafinos Δημοσ. 20 Ιουλίου 2014 Μέλος Δημοσ. 20 Ιουλίου 2014 Έχω αυτό σε Php for($i=0; $i<count($_POST['choices']); $i++){ $choices[$i][0] = $_POST['choices'][$i]; $choices[$i][1] = $_POST['rates'][$i]; } *τα choices και τα rates έχουν ίδιο length και είναι σε αντιστοιχία οπότε μη σας μπερδεύει... Αυτό που θέλω είναι... Μετά το γέμισμα του πίνακα που κάνω παραπάνω ... αν στο [$i][0] υπάρχει η ίδια τιμή παραπάνω από μία φορές τότε να προστεθούν τα rates τους... δηλαδή [$i][1] = [$i][1] + [$i+x][1] και η τιμή που υπάρχει παραπάνω από μία φορά στον πίνακα να μείνει μόνο μία φορα. Καταλάβατε τι εννοώ γιατί έτσι όπως το είπα έγινε αχταρμάς Θέλω δηλαδή array_unique() σε δισδιάστατο πίνακα αλλά με πρόσθεση του δεύτερου κελιού...
geomagas Δημοσ. 20 Ιουλίου 2014 Δημοσ. 20 Ιουλίου 2014 Δήλωσε έναν νέο πίνακα πχ $uchoices. Για κάθε στοιχείο του $choices, αν υπάρχει στον $uchoices τότε συσσώρευσε (+=) το [1] του, αλλιώς βάλτο σαν νέο στοιχείο. 1
defacer Δημοσ. 20 Ιουλίου 2014 Δημοσ. 20 Ιουλίου 2014 Γιατί να κάνεις πίνακες του στυλ [0 => choice, 1 => rate] αντί να κάνεις ένα μόνο πίνακα της μορφής [choice1 => rate1, ...]? Θα ήταν πολύ βολικότερο. Κατά τα άλλα γι' αυτό που θες η PHP δεν έχει τίποτα, οπότε είτε γράφεις μια γενικής χρήσης function για να κάνεις group by σε πίνακες είτε manually όπως λέει ο geomagas, πχ: $results = []; foreach ($_POST['choices'] as $i => $choice) { if (isset($results[$choice])) { $results[$choice] += $_POST['rates'][$i]; } else { $results[$choice] = $_POST['rates'][$i]; } } 1
rafinos Δημοσ. 20 Ιουλίου 2014 Μέλος Δημοσ. 20 Ιουλίου 2014 Το παράδειγμα που μου γράφεις παραπάνω δημιουργεί πίνακα της μορφής που μου πρότεινες έτσι; Αν ναι... πως μπορώ να χρησιμοποιήσω την τιμή του key σαν μεταβλητή; έτσι; foreach($results as $key => $value){ bla bla bla } Και όταν θέλω την τιμή του key θα βάζω $key και το όταν θέλω το αντίστοιχω $rate το $value; ΟΚ!!!!!!!!!! Το έκανα ευχαριστώ πάααααααρα πολύ!!!!!
defacer Δημοσ. 20 Ιουλίου 2014 Δημοσ. 20 Ιουλίου 2014 Ναι. print_r($results) για να το διαπιστώσεις μόνος σου. 1
alou Δημοσ. 21 Ιουλίου 2014 Δημοσ. 21 Ιουλίου 2014 Κατά τα άλλα γι' αυτό που θες η PHP δεν έχει τίποτα, οπότε είτε γράφεις μια γενικής χρήσης function για να κάνεις group by σε πίνακες είτε manually όπως λέει ο geomagas, πχ: $results = []; foreach ($_POST['choices'] as $i => $choice) { if (isset($results[$choice])) { $results[$choice] += $_POST['rates'][$i]; } else { $results[$choice] = $_POST['rates'][$i]; } } Αυτο δεν θα ηταν αρκετο σε οποιαδήποτε ανάλογη περίπτωση? (ρωτάω γιατί δεν είμαι σίγουρος αν κάποιες php versions ή error reporting settings παραπονεθούν..?) $results = []; foreach ($_POST['choices'] as $i => $choice) { $results[$choice] += $_POST['rates'][$i]; }
defacer Δημοσ. 21 Ιουλίου 2014 Δημοσ. 21 Ιουλίου 2014 Θα είχε το ίδιο τελικό αποτέλεσμα όσον αφορά τα $results αλλά θα έδινε E_NOTICE "undefined offset" την πρώτη φορά που συναντάει κάθε διαφορετικό $choice. Κώδικας που δίνει οποιοδήποτε notice ή warning αντικαθίσταται με άλλο ισοδύναμο που δεν δίνει. Τώρα που το σκέφτομαι πάντως θα ήταν πιο sexy να γίνει έτσι: $results = array_fill_keys($_POST['choices'], 0); foreach ($_POST['choices'] as $i => $choice) { $results[$choice] += $_POST['rates'][$i]; } 1
rafinos Δημοσ. 21 Ιουλίου 2014 Μέλος Δημοσ. 21 Ιουλίου 2014 Θα είχε το ίδιο τελικό αποτέλεσμα όσον αφορά τα $results αλλά θα έδινε E_NOTICE "undefined offset" την πρώτη φορά που συναντάει κάθε διαφορετικό $choice. Κώδικας που δίνει οποιοδήποτε notice ή warning αντικαθίσταται με άλλο ισοδύναμο που δεν δίνει. Τώρα που το σκέφτομαι πάντως θα ήταν πιο sexy να γίνει έτσι: $results = array_fill_keys($_POST['choices'], 0); foreach ($_POST['choices'] as $i => $choice) { $results[$choice] += $_POST['rates'][$i]; } Σε αυτή τη περίτπωση όμως τι γίνεται με τα ίδια κλειδιά (που δεν τα θέλουμε); με την array_fill_keys() εξαλίφονται;
defacer Δημοσ. 21 Ιουλίου 2014 Δημοσ. 21 Ιουλίου 2014 Δε γίνεται σε ένα πίνακα να υπάρχουν ίδια κλειδιά, οπότε το αποτέλεσμα της array_fill_keys είναι το ίδιο με το να έγραφες π.χ. $arr = [0 => 42, 0 => 42];
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα