[PHP] array_multisort inconsistent arraysize

Pagina: 1
Acties:

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 14:48
Hoi! Ik heb een multidimentional array:

$rank[0]["emailadres"] = hits today
$rank[1]["emailadres"] = hits yesterday
$rank[2]["emailadres"] = hits 2 days ago
$rank[3]["emailadres"] = hits 3 days ago
$rank[4]["emailadres"] = hits total

Ik vul deze array met verschillende waarden uit een MySQL-database.. Een email-adres heeft verschillende aantallen hits per dag staan, en een totaal aantal hits.
Een email-adres heeft altijd een totaal aantal hits, omdat anders het email-adres er niet tussen zou staan. Maar het aantal hits van vandaag, gister of 2/3 dagen geleden kan 0 zijn.
Als ik die informatie uit de database opvraag, krijg ik dus 'lege' waarden in mijn array.

Goed... Wat ik nu wil doen (je voelt um al aankomen): sorteren :) Sorteren op # hits vandaag, gister en nog meer. Als ik sorteer op totaal aantal hits (array_multisort($rank[4]);) dan werkt het goed. Maar zodra ik ga sorteren op iets anders (bijv. Hits vandaag (array_multisort($rank[0]);) krijg ik de error:

Warning: Array sizes are inconsistent in ergens.php on line 1008

Wat is hier een oplossing voor? Ik zat zelf al te denken om elk array langs te lopen en te controleren of er NULL-waardes inzitten en zo ja die dan te gaan vullen.. Maar daar heb ik nog niet heel goed naar gekeken.. Maar misschien zijn er andere oplossingen?

Alvast thanx! elviver

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 14:48
Ook ff in het Engels voor IRC-ppl die me kicken als ik deze lange vraag stel:

Hi! A multidimentional array:
$rank[0]["email"] = hits today
$rank[1]["email"] = hits yesterday
$rank[2]["email"] = hits 2 days ago
$rank[3]["email"] = hits 3 days ago
$rank[4]["email"] = hits total

The information inserted in this array is coming from a MySQL-database. An email-adress has different numbers of hits per day, and a total number of hits.
An email-adress always has a total number of hits, because elsewize the address wouldn't be listed in the database :) Yet, the number of hits yesterday or the day(s) before that can be zero (NULL).
So if I query for information, I'll get empty values in my multidimentional array.

What I want to do: Sort the information by # of hits today, yesterday and so on. If I sort on total hits (array_multisort($rank[4]);) it works fine. But when I start sorting on something else (ie. Hits today (array_multisort($rank[0]);) I'm getting the error:

Warning: Array sizes are inconsistent in ergens.php on line 1008

Does anyone know a sollution for this problem? I was thinking about walking through each array to check if any element isn't set and if so put 0-values into them.. I didn't take a closer look though.. But maybe some of you know other sollutions?

Thanx in advance, elviver :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

kan je bij het ophalen van de waarden uit de database dan niet gebruik maken van de IFNULL() functie? bijv:

SELECT IFNULL(kolom, 0) from tabel;

Today's subliminal thought is:


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 14:48
Hoe zou zo'n query dan moeten? Bij mij is ie nu zoiets als:

SELECT date, email, SUM(hits) FROM data WHERE date > "datum_van_4_dagen_terug" GROUP BY date, email ORDER BY date DESC

Hoe zou ik dat aan moeten pakken dan?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 14:48
IK HEB EEN OPLOSSING!! *D *D *D *D *D

Na een dag of 4 klooien met dit probleem ineens een vlaag van het tegenovergestelde van verstandsverbijstering :)
PHP:
1
2
3
4
5
6
7
<?
    foreach ($rank[7] as $key => $val) {
      for ($i = 6; $i >= 0; $i--) {
        if (!$rank[$i][$key]) { $rank[$i][$key] = 0; }
      }
    }
?>

Dit zorgt er gewoon voor dat er 0-waarden in de variabelen ingevuld worden die nog compleet niet gezet zijn.. Dan gaat de sort wel goed! *D *D *D
(heu, nu denk je: wat is $rank[7] :? Nou, ik heb de stats groter gemaakt tot 7 dagen terug.. Ik zou zelfs een formpje kunnen gaan maken om het te ordenen per willekeurige datum! :) (idee voor op de todo :P)

Thanx voor alle ideeën! (blijl0r 8-))

Ow ja: Met dank aan SeD (van IRC.ranchorelaxo.nl) voor het op het idee komen :9~