Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak "przefiltrować" tablicę ?
Forum PHP.pl > Forum > PHP
tomzoll
Witam serdecznie. Zmagam się z takim tematem i nie mogę sobie poradzić sad.gif
Mianowicie jest taka sytuacja:
Mam tablicę w której skład wchodzą elementy: Latitude, Longitude, StartTime, StopTime, Numer. Wartości wpisów sobie pogrupowałem wg elementu "Numer". Chciałbym osiągnąć taki efekt aby na podstawie źródłowej tablicy utworzyć nową tablicę która będzie zawierać pola:
1. Jeśli w tablicy źródłowej jest jeden wpis z danym 'Numerem' to należy go przepisać do nowej tablicy
2. Jeśli w tablicy źródłowej jest więcej niż jeden wpis z taką samą wartością pola 'Numer' to należy w nowej tablicy utworzyć nowy element, zawierający pola 'Latitude', 'Longitude', 'StartTime' z wartościami z pierwszego w kolejności wpisu z danym 'Numerem' i jednocześnie z polem 'StopTime' o wartości z ostatniego napotkanego wpisu z tym samym 'Numerem'.
Jednym słowem chciałbym aby z tej źródłowej tablicy:
Kod
array(23) {
  [0]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5766784"
    ["Longitude"]=>
    string(9) "2.2192276"
    ["StartTime"]=>
    string(19) "2015-10-01 08:02:18"
    ["StopTime"]=>
    string(19) "2015-10-01 08:05:18"
    ["Numer"]=>
    int(2)
  }

  [1]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5767616"
    ["Longitude"]=>
    string(9) "2.2194676"
    ["StartTime"]=>
    string(19) "2015-10-01 08:28:02"
    ["StopTime"]=>
    string(19) "2015-10-01 08:29:02"
    ["Numer"]=>
    int(33)
  }
  [2]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5767616"
    ["Longitude"]=>
    string(9) "2.2194676"
    ["StartTime"]=>
    string(19) "2015-10-01 08:29:02"
    ["StopTime"]=>
    string(19) "2015-10-01 08:31:50"
    ["Numer"]=>
    int(33)
  }
  [3]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5767616"
    ["Longitude"]=>
    string(9) "2.2194676"
    ["StartTime"]=>
    string(19) "2015-10-01 08:31:50"
    ["StopTime"]=>
    string(19) "2015-10-01 08:31:51"
    ["Numer"]=>
    int(33)
  }


uzyskać taką tablicę:
Kod
array(23) {
  [0]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5766784"
    ["Longitude"]=>
    string(9) "2.2192276"
    ["StartTime"]=>
    string(19) "2015-10-01 08:02:18"
    ["StopTime"]=>
    string(19) "2015-10-01 08:05:18"
    ["Numer"]=>
    int(2)
  }

  [1]=>
  array(5) {
    ["Latitude"]=>
    string(10) "41.5767616"
    ["Longitude"]=>
    string(9) "2.2194676"
    ["StartTime"]=>
    string(19) "2015-10-01 08:28:02"
    ["StopTime"]=>
    string(19) "2015-10-01 08:31:51"
    ["Numer"]=>
    int(33)
  }



Z góry dziękuję za pomoc.
Poniżej fragment tablicy.
Pozdrawiam smile.gif
Pyton_000
Foreach,kilka IF i jedziesz.
tomzoll
Tak wiem, próbuje cały czas z Foreach i IF-ami, ale mi same glupoty wychodzą sad.gif
nospor
Lec po starej tablicy i na podstawie starej tablicy tworz zupelnie nowa tablice. Znaczy ta nowa tablica ma miec strukture co chcesz, tylko bedzie zawierala juz pogrupowane dane.
Jesli w nowej tablicy nie ma danego numer ze starej, to tworz go w nowej
Jesli w nowej tablicy jest numer ze starej, to zupdatuj tylko dany element w nowej.
tomzoll
Czy mógłbym prosić o pomoc na jakimś przykładzie ? Nie chodzi mi o gotowy kod smile.gif
nospor
Hm... opis ktore podalem wyzej to naprawde dwa IF. Czego w nim nie rozumiesz, to wytlumacze ci jasniej smile.gif
tomzoll
1. (Pierwszy IF) Nie wiem jak skopiować element z jednej tablicy wielowymiarowej do drugiej oraz przed skopiowaniem jak sprawdzić czy taki element istnieje smile.gif
2. (Drugi IF) Nie wiem jak zupdatować wartość istniejącego elementu w drugiej tablicy smile.gif
Dziękuję za pomoc smile.gif
nospor
jak sprawdzic?
Tworzac elementy w nowej tablicy, jako indekx nadajesz jest wartosc numer ze starej tablicy
$nowa[$starynumer] = blabla
A potem sprawdzasz:
if (isset($nowa[$starynumer])) { //jest
} else { //nie ma
}

Jak skopiowac?
$nowa[$starynumer] = $aktualnyelement_z_petli_po_starej;

Jak update?
$nowa[$starynumer]['Latitude'] = 'nowa wartosc';
itd. z innymi polami.

smile.gif
tomzoll
a jak to zrobić w przypadku tablicy wielowymiarowej? bo tutaj będę miał taki przypadek sad.gif
nospor
No wlasnie to co ci podalem to jest wlasnie wielowymiarowa

Tablica wielowymiarowa niczym sie nie rozni od jednowymiarowej. Obie to tablice, obie maja indeksy.
Jedyne co to w wielowymiarowej zamiast pojedynczej wartosci masz kolejna tablice ot co.
tomzoll
Wielie dzięki. Wszystko działa jak należy:)
Pozdrawiam smile.gif
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.