Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Uzupełnienie luk tablicy
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Ciężko mi nazwać temat bo nie mam pojęcia jak to nazwać, a ogólnie problem prosty.

Dane z bazy wyciągnięte dzięki GROUP BY i funkcji date ORAZ SUM

type date SUM
xxx 2008-03-27 1
xxx 2008-03-30 6
xxx 2008-04-04 1
xxx 2008-04-05 2
xxx 2008-04-06 8
xxx 2008-04-07 2
xxx 2008-04-08 3
xxx 2008-04-09 2

(xxx to jakiś typ usługi, data zamówienia i suma w danym dniu).
Dane pobieram do wykresu, który przyjmuje wartości w formie json co jest mniej istotne.
Istotne mianowicie jest, że podaje je po przecinku, a wykres sam podstawia pod daty i prowadzi to do błędu w przypadku przerw.

Chciałbym dostać tablice, z wszystkimi indeksami wraz z lukami z wartością ZERO.
type date SUM
xxx 2008-03-27 1
xxx 2008-03-28 0
xxx 2008-03-29 0

xxx 2008-03-30 6
itd.

Wykres przyjmuje wartości w postaci 1, 0, 0, 6 i można się domyśleć, że brak zer spowoduje przesunięcie.

Może to się da zrobić na poziomie samego zapytania (mysql), jeśli nie to jak to zrobić po stronie php?
Oczywiście mogę puścić pętle iterującą po kolejnych dniach ale to wygeneruje kilkaset zapytań (tyle ile dni) do bazy - raczej mało optymalne.
Poza tym tych typów jest kilka i ostatecznie chciałbym otrzymać kilka tablic - oddzielnie dla każdego.

Ten post edytował markonix 26.12.2010, 22:56:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Miałem pewne opory ze względu na to, że tablica ma pewne ograniczenia pamięciowe i kiedyś skrypt mi się wysypał stąd uraz (IMG:style_emoticons/default/smile.gif)

Twoje porady się sprawdziły choć array_merge nie do końca spełniło oczekiwania co do drugiego indeksu - typu usługi.
Ładowało zerami tylko gdy nie było żadnej usługi, żadnego typu. Gdy choć jedna była w danym dniu to już omijał i zostawiał jak było.
Ale byłem pewien, że ktoś chciał osiągnąć taki efekt jak ja i wypróbowałem wszystkie funkcje na php.net
Gdzieś za 5tym razem trafiłem:

  1. function array_overlay($a1,$a2)
  2. {
  3. foreach($a1 as $k => $v) {
  4. if(!array_key_exists($k,$a2)) continue;
  5. if(is_array($v) && is_array($a2[$k])){
  6. $a1[$k] = array_overlay($v,$a2[$k]);
  7. }else{
  8. $a1[$k] = $a2[$k];
  9. }
  10. }
  11. return $a1;
  12. }


Dzięki za pomoc.

Ten post edytował markonix 27.12.2010, 01:39:36
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 01:34