Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] algorytm z dwiema tablicami
Forum PHP.pl > Forum > Przedszkole
SubZero.
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?
phpion
Nie wymyślaj żadnych algorytmów tylko skorzystaj z manuala:
array_intersect" title="Zobacz w manualu PHP" target="_manual
SubZero.
Chcę napisać ten algorytm w PHP, żeby móc go również przenieść na inne języki i nie chcę korzystać z funkcji PHP.
phpion
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.
SubZero.
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. ?>
Cysiaczek
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
nevt
ź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
Maxik
Poczytaj o foreach" title="Zobacz w manualu PHP" target="_manual kod będzie przejrzystszy. echo możesz wywoływać bez nawiasów.
zegarek84
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)
SubZero.
WOW! Wielkie dzięki chłopaki!
Przede mną sporo nauki ;-)

[POMÓGŁ] kliknięte dla każdego z Was.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.