Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα σε ολους/ες. Φτιαχνω ενα προγραμματακι στην php

με το οποιο προσπαθω να βρω τα στοιχεια (αριθμους) ενος πινακα

τα οποια εμφανιζονται 2 φορες και στην κανονικη τους σειρα και αναποδογυρισμενα.

 

Τι εννοω: Ας πουμε εχω εναν πινακα που εχει στοιχεια:

 

>$array(0-1, 0-2, 0-3, 1-0, 1-2, 1-3, 2-0, 2-2, 2-3);

Αυτος ο πινακας θα χρησιμοποιηθει για συγκρισεις μεταξυ strings.

Καθε αριθμος πχ. 0, 1, 2 κλπ. αντιστοιχει σε ενα string σε εναν αλλο πινακα.

Επομενως δεν μπορει να υπαρξει συγκριση μεταξυ ιδιων strings.

Δηλαδη αν 0 αντιστοιχει σε πατατα και 1 σε ντοματα,

συμφωνα με το πρωτο στοιχειο του $array θα ειναι: πατατα - ντοματα.

Ομως συμφωνα με το τεταρτο στοιχειο του $array θα ειναι ντοματα - πατατα.

Αλλα αυτη η συγκριση εχει ηδη γινει.

Πως μπορω να αφαιρεσω η να αποθηκευσω αλλου τα στοιχεια του πινακα

που ειναι μοναδικα και σε κανονικη σειρα και σε αναποδογυρισμενη;

Δημοσ.

Καλησπερα σε ολους/ες. Φτιαχνω ενα προγραμματακι στην php

με το οποιο προσπαθω να βρω τα στοιχεια (αριθμους) ενος πινακα

τα οποια εμφανιζονται 2 φορες και στην κανονικη τους σειρα και αναποδογυρισμενα.

 

Τι εννοω: Ας πουμε εχω εναν πινακα που εχει στοιχεια:

 

>$array(0-1, 0-2, 0-3, 1-0, 1-2, 1-3, 2-0, 2-2, 2-3);

Αυτος ο πινακας θα χρησιμοποιηθει για συγκρισεις μεταξυ strings.

Καθε αριθμος πχ. 0, 1, 2 κλπ. αντιστοιχει σε ενα string σε εναν αλλο πινακα.

Επομενως δεν μπορει να υπαρξει συγκριση μεταξυ ιδιων strings.

Δηλαδη αν 0 αντιστοιχει σε πατατα και 1 σε ντοματα,

συμφωνα με το πρωτο στοιχειο του $array θα ειναι: πατατα - ντοματα.

Ομως συμφωνα με το τεταρτο στοιχειο του $array θα ειναι ντοματα - πατατα.

Αλλα αυτη η συγκριση εχει ηδη γινει.

Πως μπορω να αφαιρεσω η να αποθηκευσω αλλου τα στοιχεια του πινακα

που ειναι μοναδικα και σε κανονικη σειρα και σε αναποδογυρισμενη;

 

Αυτό που σκέφτομαι είναι ότι αν βάλεις τα δεδομένα σου σε 2 δυσδιαστάτους πίνακες μεγέθους Ν * Μ.

Αυτό γίνεται εύκολα. Κατόπιν αρχικοποίησε όλα τα στοιχεία σε FALSE. Κάθε φορά που εκτελείς μία ένωση 1->2 πχ

κάνε την θέση TRUE και την θέση 2->1 επίσης.

πχ:

0 0 0 0 0 0 0

0 0 1 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

 

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 1 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

 

Από τον επάνω πίνακα βλέπεις πως το στοιχείο (1,2) = 1 και (2, 1) = 1. Αυτό σημαίνει ότι έχεις χρησιμοποιήσει και τα 2. Οπότε εσύ με ελέγχους μετά βλέπεις τι θέλεις. Κάπως έτσι μου ήρθε, μπορεί να υπάρχει και καλύτερος τρόπος.

Δημοσ.

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

 

Δηλαδή τα ζευγάρια "0-1" και "1-0" θα είναι αντιστοιχισμένα σε ένα μόνο στοιχείο στον πίνακα αντιστοίχισης.

 

Καθώς επισκέπτεσαι τα ζευγάρια του αυθεντικού σου πίνακα, θα τσεκάρεις αν το αντιστοιχισμένο του στοιχείο στον πίνακα-αντιστοίχισης είναι false. Σε αυτή την περίπτωση θα το αλλάζεις σε true και θα συνεχίζεις. Αν είναι true, τότε θα αγνοείς το αυθεντικό ζευγάρι από τους υπολογισμούς σου. Είναι αυτό που είπε και φίλος bokarinho..

 

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

Δημοσ.

Ευχαριστω για τις απαντησεις σας τελικα βρηκα μια αλλη λυση χαρη στη βοηθεια των συναρτησεων της php.

 

>$array3  = array();


function array_rollover($arg){
list($a, $ = explode('-',$arg);
return ($a < $ ? $arg : $b.'-'.$a;
}

$array3 = array_unique(array_map('array_rollover', $array3));

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...