Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Grupowanie wartości?
Forum PHP.pl > Forum > PHP
spenalzo
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 :-)
zombie
SQL czy plik? ... bo jak SQL, to poczekaj. Ja tez wysiadam biggrin.gif
cahe
// 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 :-).
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.