Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodawanie elementu do wnętrza tablicy Array
Forum PHP.pl > Forum > PHP
grz16w
Witam. Jako że mam pewien problem, z którym wyjątkowo nie potrafię sobie poradzić od kilku dni, postanowiłem zapytać o niego ekspertów. Jest to mój pierwszy post, zawsze radziłem sobie sam i wiem do czego służy wyszukiwarka. Mianowicie wygląda to tak:

Mam tablicę obiektów, w której to obiekty są posortowane wg ich pola $obiekt->id. Chciałbym wykonać pętlę, która by sortowała moją tablicę tak, aby po każdym obiekcie o danym $obiekt->id znalazły się obiekty, które wartość $obiekt->id2 mają taką samą jak $obiekt->id poprzedzającego je obiekt. Oczywiście namieszałem, ale w skrócie to chodzi mi o funkcję, która wpisywałaby mi nową wartość do tablicy w jakimś tam miejscu wewnątrz, a nie jako ostatni element, jednocześnie przesuwając indeksy kolejnych kluczy, od miejsca wstawienia nowego elementu o 1 dalej. Nie mam pojęcia jak to rozwiązać. Pozdrawiam wszystkich i z góry dziękuję za konstruktywne odpowiedzi smile.gif
Zyx
Algorytm prostego sortowania przez wstawianie się kłania. Przebieg pętli składa się z trzech faz:

1. Szukasz miejsca do wstawienia
2. Wstawiasz element
3. Przesuwasz wszystkie obiekty o jedną pozycję do przodu.

Przesuwanie robi się bardzo prosto. Jesteś na pozycji X w tablicy. Zapamiętujesz jej obiekt w zmiennej tymczasowej A, a na pozycję wstawiasz obiekt ze zmiennej tymczasowej B. Następnie przepisujesz obiekt ze zmiennej A do B. Tyle. Pierwszą wartość zmiennej B bierzesz z pozycji tablicy, pod którą wstawiasz nowy element.
grz16w
Dzięki wielkie smile.gif spróbuję tak zrobić smile.gif jednak takie proste rzeczy mi jeszcze sprawiają problemy wstydnis.gif pozdrawiam
wmatusiak
Bo każde zadanie ma więcej niż jedno rozwiązanie wink.gif
a ja już dawno temu nauczyłem się że do operacjach na tablicach lepiej korzystać z funkcji php do tego stworzonych niż używać pętli.
Rzadko zdarz się operacja na tablicy której nie da się wykonać przez kombinację funkcji php zawartych tutaj wink.gif
  1. <?php
  2. function array_insert($array, $index, $element)
  3. {
  4. $tmp = array_slice($array, 0, $index);
  5. array_push($tmp, $element);
  6. return array_merge($tmp, array_slice($array, $index));
  7. }
  8.  
  9. // Test
  10. $a = Array("a", "b", "c", "d", "e", "f");
  11. $a = array_insert($a, 0, "000");
  12. $a = array_insert($a, 3, "333");
  13. $a = array_insert($a, 20, "end");
  14. // Przykład wstawiania na pozycję elementu "d",
  15. $a = array_insert($a, array_search("d", $a), "nowy element");
  16. // UWAGA jeśli element nie istnieje wstawi na początek
  17. $a = array_insert($a, array_search("nieznany", $a), "nowy na pozycji nieznanego");
  18. var_dump($a);
  19. ?>


PS. Założyłem że tablica jest ciągła, indeksowana od 0 i nie jest to tablica asocjacyjna.
Fifi209
Wszystko ładnie pięknie, tylko on nie ma zwykłych tablic, tylko musi informacje wyłuskać z obiektu, dlatego powinien zastosować się do rady pierwszej.
wmatusiak
Cytat(grz16w @ 3.04.2011, 09:06:32 ) *
... ale w skrócie to chodzi mi o funkcję, która wpisywałaby mi nową wartość do tablicy w jakimś tam miejscu wewnątrz, a nie jako ostatni element, jednocześnie przesuwając indeksy kolejnych kluczy, od miejsca wstawienia nowego elementu o 1 dalej.


@fifi209
moja funkcja robi dokładnie to co chciał autor niezależnie od tego czym są elementy tablicy przykład był z stringami bo było prościej, spróbuj z obiektami i też zadziała.

Czytać ze zrozumieniem proponuję autor wyraźnie pisze o tablicy obiektów i problem nie jest z wyszukaniem tylko z wstaiwenim.
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.