Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] algorytm z dwiema tablicami
SubZero.
post 17.10.2008, 18:30:40
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 15.09.2007
Skąd: getCity();

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


Witam,

Chcę napisać algorytm, który z dwóch tabel A i B wypełnionymi stringami, wsadzi do trzeciej tablicy C wszystkie stringi, które powtarzają się w tablicy A oraz B. Narazie zadeklarowałem dwie tablice, A i B:

  1. <?php
  2. $A = Array('Joe', 'Bob', 'Sarah', 'Bill', 'Suzy');
  3. $B = Array('cos', 'pos', 'suzy', 'Bob');
  4. ?>

I teraz jak to zrobić, żeby porównać te stringi w obu tablicach i wsadzić je do tablic C?

Ten post edytował SubZero. 17.10.2008, 18:31:20
Go to the top of the page
+Quote Post
phpion
post 17.10.2008, 18:33:18
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie wymyślaj żadnych algorytmów tylko skorzystaj z manuala:
array_intersect" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
SubZero.
post 17.10.2008, 18:49:35
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 15.09.2007
Skąd: getCity();

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


Chcę napisać ten algorytm w PHP, żeby móc go również przenieść na inne języki i nie chcę korzystać z funkcji PHP.

Ten post edytował SubZero. 17.10.2008, 18:50:02
Go to the top of the page
+Quote Post
phpion
post 17.10.2008, 19:04:03
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W takim razie robisz pętle w pętli; zewnętrza pętla przelatuje po wszystkich elementach tablicy 1, natomiast wewnętrzna przelatuje po wszystkich elementach tablicy 2 szukając w niej aktualnego elementu. Jeśli znajdzie to wpisuje go do nowej tablicy.
Go to the top of the page
+Quote Post
SubZero.
post 17.10.2008, 19:47:43
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 15.09.2007
Skąd: getCity();

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


OK, napisałem algorytm... ale niestety tablica C coś nie chce mi wyświetlić zawartości.
Oto mój kod:

  1. <?php
  2. $A = Array('Joe', 'Bob', 'Sarah', 'Bill', 'Suzy');
  3. $B = Array('Joe', 'pos', 'suzy', 'Bob');
  4.  
  5. $lenghtA = count($A);
  6. $lenghtB = count($B);
  7.  
  8. for ($i=0; $i <= $lengthA; $i++)
  9. {
  10.  if ($A[i] == $B[i]) $C[] = $A[i];
  11.  $i++;
  12.  for ($j=0; $j <= $lengthB; $j++)
  13.  {
  14.    if ($A[j] == $B[j]) $C[] = $A[j];
  15.    $j++;
  16.  }
  17. }
  18.  
  19. print_r($A);
  20. echo ("<br>");
  21. print_r($B);
  22. echo ("<br>");
  23. print_r($C);
  24. ?>


--------------------
Wesołych Świąt!:)
Go to the top of the page
+Quote Post
Cysiaczek
post 17.10.2008, 20:15:06
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Oj kolego. Zanim zanim zaczniesz przenosić algorytmy między językami, to się php dobrze naucz smile.gif
nie
  1. <?php
  2. $A[i]
  3. ?>

tylko
  1. <?php
  2. $A[$i]
  3. ?>

i dalej analogicznie


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
nevt
post 17.10.2008, 20:16:54
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


źle to napisałeś... aż się roi od błędów...
  1. <?php
  2. $A = Array('Joe', 'Bob', 'Sarah', 'Bill', 'Suzy');
  3. $B = Array('Joe', 'pos', 'suzy', 'Bob');
  4. $C = Array();
  5.  
  6. $lengthA = count($A);
  7. $lengthB = count($B);
  8.  
  9. for ($i=0; $i < $lengthA; $i++)
  10.  for ($j=0; $j < $lengthB; $j++)
  11.    if (($A[$i] == $B[$j]) && !in_array($A[$i], $C))
  12.      $C[] = $A[$i];
  13.  
  14. print_r($A);
  15. echo ('<br>');
  16. print_r($B);
  17. echo ('<br>');
  18. print_r($C);
  19. ?>

powinno dać dobre rezultaty


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Maxik
post 17.10.2008, 20:17:36
Post #8





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


Poczytaj o foreach" title="Zobacz w manualu PHP" target="_manual kod będzie przejrzystszy. echo możesz wywoływać bez nawiasów.


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
zegarek84
post 17.10.2008, 20:18:52
Post #9





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


sprubuj tak: (ale nie sprawdzałem ;p)

Kod
<?php
$A = Array('Joe', 'Bob', 'Sarah', 'Bill', 'Suzy');
$B = Array('Joe', 'pos', 'suzy', 'Bob');
$lenghtA = count($A);
$lenghtB = count($B);
$C = Array();
for ($i=0; $i < $lengthA; ++$i)
{

for ($j=0; $j < $lengthB; ++$j)
{
   if ($A[$i] == $B[$j]) $C[] = $A[j];
  }
}
print_r($A);
echo ("<br>");
print_r($B);
echo ("<br>");
print_r($C);
?>

wcze śniej musisz zdefiniować zmienną tablicową C... $C = Array();
nie kozystasz z petli while() tylko for() więc bez potrzeby jeszcze wewnątrz zwiekszasz wartości - w ten sposób przeskakujesz co drugi element....
przeanalizuj zagniezdżenie tych pętli, pętla wewnetrzna zostanie wykonana wiele razy po tych samych $B podmieniając tylko raz A petlą zewnętrzną... choć napisałem ++$i to mogło być tak jak bylo $i++....
petla for() zostaje wykonana od $i=0 (czyli juz dla 0 odliczasz pierwszy przebieg), skoro argumentow a $A jest pieć to policz (0;1;2;3;4) - tak więc $i< $lengthA...

nie gwarantuję że jest dobże bo nie sprawdzałem ;p



EDIT

i jak widze jeszcze dokłądniej sprawdził nevt czy juz czasem nie ma elementu $A w tablicy $C:

($A[$i] == $B[$j]) && !in_array($A[$i], $C)

Ten post edytował zegarek84 17.10.2008, 20:24:45


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
SubZero.
post 17.10.2008, 20:32:21
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 15.09.2007
Skąd: getCity();

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


WOW! Wielkie dzięki chłopaki!
Przede mną sporo nauki ;-)

[POMÓGŁ] kliknięte dla każdego z Was.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:56