Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Porównanie dwóch tablic wielowymiarowych i tworzenie trzeciej
ralothhardica
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2012

Ostrzeżenie: (0%)
-----


Mam dwie tablice wielowymiarowe:
  1. $tab1 = array (1=>
  2. array(1=>'Paweł','666666666'),
  3. array(1=>'Anna','88888888'),
  4. array(1=>'Adam','555555555'),
  5. array(1=>'Ola','777777777')
  6. );
  7. $tab2 = array (1=>
  8. array(1=>'555555555','Nowak'),
  9. array(1=>'88888888','Nazwisko'),
  10. array(1=>'666666666','Bbbbbbb'),
  11. array(1=>'777777777','AAaaaaa')
  12. );


Potrzebuje je porównać numery telefonów (555555555,666666666,.....) i otrzymać trzecią tablice
  1. $tab3 = array (1=>
  2. array(1=>'Adam','Nowak','555555555'),
  3. array(1=>'Anna','Nazwisko','88888888'),
  4. array(1=>'Paweł','Bbbbbbb','666666666'),
  5. array(1=>'Ola','AAaaaaa','777777777'),

Ma ktoś jakieś pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A jakie masz Ty? I co w nich nie działa?
Go to the top of the page
+Quote Post
ralothhardica
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2012

Ostrzeżenie: (0%)
-----


Próbowałem
  1. array_intersect($tab1, $tab2);

ale zwraca tylko elementy elementy $tab1 które znajdują się w $tab2. Nie wiem jak to zrobić żebym dostawał przy którym indeksie jest taki sam rekord.
Go to the top of the page
+Quote Post
Shido
post
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 22
Dołączył: 22.06.2012

Ostrzeżenie: (0%)
-----


Jak fan nieoptymalnych rozwiązań, proponuje wrzucić jedną tablicą w pętle i w tej pętli wywołać pętle z drugą tablicą i w tej drugiej pętli zrobic porównanie typu:
  1. if($tab1[$x][1] == $tab2[$y][0])
  2. {
  3. //i tu tworzenie 3 tablicy
  4. }
Go to the top of the page
+Quote Post
ralothhardica
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2012

Ostrzeżenie: (0%)
-----


Napisałem taką pętle:
  1. for ($i=1; $i<=count($tab1);$i++){
  2. for($j=1;$j<=count($tab1);$j++){
  3. if($tab1[$i][2] == $tab2[$j][1]){
  4. $tab3[$i][1] = $tab1[$i][1];
  5. $tab3[$i][2] = $tab1[$i][2];
  6. $tab3[$i][3] = $tab2[$j][1];
  7. $tab3[$i][4] = $tab2[$j][2];
  8. }
  9. }
  10. }

Wszystko ok, tylko przy kilku tysiącach rekordów trochę czasu to zajmuje.
Go to the top of the page
+Quote Post
Shido
post
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 22
Dołączył: 22.06.2012

Ostrzeżenie: (0%)
-----


Tak jak napisałem, działac będzie działał, ale nieoptymalne, chociaż nie wiem czy w ogóle jest jakis inny sposób (pewnie ktos wpadnie i pokaże że jednak jest (IMG:style_emoticons/default/smile.gif) ).
Go to the top of the page
+Quote Post
ralothhardica
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2012

Ostrzeżenie: (0%)
-----


Ok dzięki. Na razie musi mi to wystarczyć. Może ktoś będzie miał jakiś inny pomysł (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:17