Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie elementu z tablicy dwuwymiarowej
Forum PHP.pl > Forum > Przedszkole
danon198901
Witam,
przykładowy kod prezentuje się następująco:
  1. <?php
  2.  
  3. $abc[1][0] = 0;
  4. $abc[1][1] = 1;
  5. $abc[1][2] = 2;
  6. $abc[1][3] = 3;
  7. $abc[1][4] = 4;
  8.  
  9. for($i=0; $i<5; $i++)
  10. {
  11. echo 'Indeks '.$i.' = '.$abc[1][$i].'<br />';
  12. }
  13.  
  14.  
  15. echo '<br /><br /><br />Usuwamy element<br /><br /><br />';
  16. unset($abc[1][2]);
  17. for($i=0; $i<5; $i++)
  18. {
  19. echo 'Indeks '.$i.' = '.$abc[1][$i].'<br />';
  20. }
  21.  
  22. ?>


Przy uruchomieniu skryptu dostaję informację: Notice: Undefined offset: 2 in C:\xampp\htdocs\test\test.php on line 19, bowiem indeks nr. 2 pozostaje pusty/niezdefiniowany. Czy istnieje funkcja dzięki, której po usunięciu elementu indeks pomniejsza się i na miejsce indeksu 2 wskakuje 3, na miejsce 3 - 4 itp. Więc generalnie z początkowego stanu 0,1,2,3,4 po usunięciu indekstu nr2 uzyskam 0,1,3,4.
MlodyJNTR
czy o to ci chodziło?

  1. <?php
  2. $abc[1][0] = 0;
  3. $abc[1][1] = 1;
  4. $abc[1][2] = 2;
  5. $abc[1][3] = 3;
  6. $abc[1][4] = 4;
  7.  
  8. for($i=0; $i<5; $i++)
  9. {
  10. echo 'Indeks '.$i.' = '.$abc[1][$i].'<br />';
  11. }
  12.  
  13. echo '<br /><br /><br />Usuwamy element<br /><br /><br />';
  14. unset($abc[1][2]);
  15. for($i=0; $i<5; $i++)
  16. {
  17. if ($abc[1][$i] !== $abc[1][2]) {
  18. echo 'Indeks '.$i.' = '.$abc[1][$i].'<br />';
  19. }
  20. }
  21. ?>
b4x
ksort

np.
  1. ksort($abc[1]);

#edit
tfuu zjadłem literkę
danon198901
a no sort() usuwa jeszcze:D

Dzięki za odpowiedźsmile.gif


EDIT - sort() też usunął indeks:P

OK korzystając z okazji, bo topic tyczy się tego problemu. Mam masę błędów związanych z działaniem zagnieżdżonych pętli i pojawiają się one tylko wtedy jak mam unset - usunięcie elementu z tablicy. Coś logicznie musi nie działać, ale jak długo się zastanawiam nad tym tak długo utwierdzam się w przekonaniu, że jest OK, a przecież nie jest:(

  1. for($p=1; $p<=$ukryte_dane; $p++)
  2. {
  3. if($p != $ukryte_dane)
  4. {
  5. for($q=$ukryte_dane; $q>=$p+1; $q--)
  6. {
  7. $ilosc_wprzod = count($lista_wierz[$p]);
  8. for($pp=0; $pp<$ilosc_wprzod; $pp++)
  9. {
  10. $ilosc_wtyl = count($lista_wierz[$q]);
  11. for($qq=$ilosc_wtyl; $qq>=0; $qq--)
  12. {
  13. if(in_array($lista_wierz[$p][$pp], $lista_wierz[$q][$qq]))
  14. {
  15. unset($lista_wierz[$q][$qq]);
  16. sort($lista_wierz[$q]);
  17. }
  18. }
  19. }
  20. }
  21. }
  22.  
  23. }

O co dokładnie chodzi. Mam listę punktów (ilość punktów określona zmienna $ukryte_dane) zapisaną w postaci tablicy dwuwymiarowej, która w każdym drugim wymiarze trzyma dane na temat połączenia z innymi punktami. Czyli np. punkt 1 powiązany jest z punktem 2, tak samo punkt 2 powiązany jest z punktem 1. Moim celem jest wywalenie z punktu większego niż ten określony w pętli pierwszej (for) powiązania. Innymi słowy na przykładzie punkt 1 ma mieć powiązanie z punktem 2, natomiast punkt 2 nie powinien posiadać informacji na temat powiązania z punktem 1. Trochę to zawiłe, ale posłuży mi to do większego projektu. Być może okarze się, że jest łatwiejszy sposób na wykonanie tego, a ja ide na około...
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.