[PHP] array's

Pagina: 1
Acties:

Onderwerpen


  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Dag iedereen..

Ik gebruik het volgende om een array te sorteren. Ik heb allerlei id nummers in een kolom staan (15,15,15,2,2,4,4,15,15,2 bijvoorbeeld) en die sorteer ik via:

PHP:
1
2
3
4
<?
sort($browser_ids);
reset($browser_ids);
?>


Nu wordt er dus van '15,15,15,2,2,4,4,15,15,2' het volgende gemaakt: '2,2,2,4,4,15,15,15,15,15'.

Alleen nu wil ik het nogmaals sorteren, op het aantal values.. Dus het moet als volgt worden:

15,15,15,15,15,2,2,2,4,4

Hij is nu dus gesorteerd via sort (zodat je de cijfertjes mooi achter elkaar kreeg die hetzelfde zijn) en op aantal van de cijfertjes.. :) Ik heb op php.net gezocht bij arrays maar heb wel 20 functies bekeken en niet 1 gevonden die iets zoals deze doet.. misschien kijk ik verkeerd, maar misschien kan het ook wel niet?! :/ Ik zoek nl echt een soort 'sort' functie die zoiet kan..

dus zeg maar een functie, die een array kan sorteren op dezelfde values :)

[ Voor 12% gewijzigd door Zenda op 22-09-2004 10:46 . Reden: duidelijkere beschrijving van wat ik zoek ]

Zenda likes some milk every now and then..


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Als je een database gebruikt dan kun je dit veel makkelijker met sql commando's doen. Ik zie hier wel ergens 'kolom' worden genoemd dus ik vermoed dat deze gegevens wel uit een DB komen, maar de manier waarop dit is opgeslagen voldoet waarschijnlijk nog niet eens aan de eerste normaal vorm.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
ongetest:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$array=array(15,2,15,2,4);
$res=array();
foreach($array AS $nr){
  if(isset($res[$nr)){
    $res[$nr]++;
  }else{
    $res[$nr]=1; 
  }
}
sort($res);
//nu kan je op basis van de array res de gegevens tonen die je wilt hebben.
//bijvoorbeeld:
foreach($res AS $nr => $aantal){
  for($i=0; $i<$aantal; $i++){
    echo $nr.' ';
  }
}

[ Voor 9% gewijzigd door djluc op 22-09-2004 10:51 ]


Verwijderd

Volgens mij bestaat zo'n functie niet en zul je hem zelf moeten maken. Hierbij kan je gebruik maken van de functie: array_count_values().

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Nou.. het is me gelukt.. En als volgt:

PHP:
1
2
3
4
5
6
$browser_ids = "15,12,12,12,12,12,15,15,25,25,2,2,2,2,2,2,2,2,2,2,5";

$res = array_count_values($browser_ids);
rsort($res);

echo var_dump($res) . "<br />";


De 'var_dump()' gaf nu weer:

[2] => int(10), [12] => int(5), [15] => int(2), [25] => int(2), [5] => int(1)


Vervolgens loop ik er doorheen:

PHP:
1
2
3
4
foreach ($res as $key => $value)
{
   echo "id nummer: " . $key . "<br />Met als value: " . $value . "<p>";
}


Erg bedankt! Wist niet dat de functie array_count_values() bestond :)!

Zenda likes some milk every now and then..


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Dat is toch wel even iets handiger dan mijn oplossing :+
Pagina: 1