Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dodawanie elementu do wnętrza tablicy Array
grz16w
post 3.04.2011, 08:06:32
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.07.2009
Skąd: Rzeszów

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


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
Go to the top of the page
+Quote Post
Zyx
post 3.04.2011, 08:26:02
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
grz16w
post 3.04.2011, 08:28:03
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.07.2009
Skąd: Rzeszów

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


Dzięki wielkie smile.gif spróbuję tak zrobić smile.gif jednak takie proste rzeczy mi jeszcze sprawiają problemy wstydnis.gif pozdrawiam
Go to the top of the page
+Quote Post
wmatusiak
post 6.04.2011, 21:19:27
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 7
Dołączył: 27.03.2011
Skąd: Kęty

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


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.
Go to the top of the page
+Quote Post
Fifi209
post 6.04.2011, 21:34:00
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
wmatusiak
post 6.04.2011, 22:27:14
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 7
Dołączył: 27.03.2011
Skąd: Kęty

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


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.
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: 20.04.2024 - 05:03