Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie wartości?
spenalzo
post 5.08.2003, 01:02:15
Post #1





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Kod
----+------+--------+-------

ID | user | userid | czas

----+------+--------+-------

1  | spen | 1      | 1003

2  | ktos | 45     | 46

3  | spen | 1      | 6744

...

56 | spen | 1      | 6954

57 | spen | 1      | 6996

58 | spen | 1      | 16467

..

901| spen | 1      | 75785

902| spen | 1      | 75923

903| spen | 1      | 76085


i teraz jak zrobić aby z tego przykładu zrobiły sie trzy grupy wg czasu:
a) 6744, 6954, 6966
b) 16467
c) 75785, 75923, 76085
czyli po prostu tak pogrupować te wartości, aby w jednej grupie były wszystkie te, której wartość pierwsza nie różni się od wartości ostatniej z danej grupy o więcej niż np. 3600.

Bo ja już wysiadam :-)


--------------------

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
zombie
post 5.08.2003, 07:18:07
Post #2





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


SQL czy plik? ... bo jak SQL, to poczekaj. Ja tez wysiadam biggrin.gif


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
cahe
post 5.08.2003, 09:24:16
Post #3





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 22.03.2003

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


// Update czytelności wyniku array_values: 5 sierpnia 2003 12:41

Cytat
Kod
----+------+--------+-------

ID | user | userid | czas

----+------+--------+-------

1  | spen | 1      | 1003

2  | ktos | 45     | 46

3  | spen | 1      | 6744

...

56 | spen | 1      | 6954

57 | spen | 1      | 6996

58 | spen | 1      | 16467

..

901| spen | 1      | 75785

902| spen | 1      | 75923

903| spen | 1      | 76085


i teraz jak zrobić aby z tego przykładu zrobiły sie trzy grupy wg czasu:
a) 6744, 6954, 6966
b) 16467
c) 75785, 75923, 76085
czyli po prostu tak pogrupować te wartości, aby w jednej grupie były wszystkie te, której wartość pierwsza nie różni się od wartości ostatniej z danej grupy o więcej niż np. 3600.

Bo ja już wysiadam :-)



Ja bym to zrobił tak:
//UPDATE :: Lekko poprawiłem kod ;-). Zwróc uwage na dwie ostatnie wartości w tablicy - teraz już skrypt grupuje je jak powinien.

[php:1:176c322d7d]<?php
$wartosci = array(6744, 6954, 6966,75785, 75923, 76085, 16467, 6744 + 3599, 6744 + 3601);
//Zakładam że masz to do tablicy np. wczytane.
sort($wartosci);
$last = $wartosci[0] + 3600;
$i = 0;
foreach($wartosci as $tmp)
{
if($tmp > $last)
{
$i++;
$grupa[$i][] = $tmp;
$last = $tmp + 3600;
}
else
{
$grupa[$i][] = $tmp;
}
}
echo('<pre>');
print_r(array_values($grupa));
echo('</pre>');
?>[/php:1:176c322d7d]

Powstanie ci dzięki temu tablica wielowymiarowa $grupa, gdzie np:
Kod
Array

(

    [0] => Array

        (

            [0] => 6744

            [1] => 6954

            [2] => 6966

            [3] => 10343 <== to jest 6744 + 3599

        )



    [1] => Array

        (

            [0] => 10345 <== a to już 6744 + 3601

        )



    [2] => Array

        (

            [0] => 16467

        )



    [3] => Array

        (

            [0] => 75785

            [1] => 75923

            [2] => 76085

        )



)

itd.

Mam nadzieje że o to chodziło :-).
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: 19.07.2025 - 19:44