Subarray Sorteren

Status
Niet open voor verdere reacties.

Jeroentjhuh

Gebruiker
Lid geworden
4 mei 2010
Berichten
23
Ik heb de volgende code:

PHP:
<?php

$afdelingen = array(
	1 => array(
		'Naam' => 'Afd.1',
		'Omzet' => $_POST['a1']
	),
	2 => array(
		'Naam' => 'Afd.2',
		'Omzet' => $_POST['a2']
	),
	3 => array(
		'Naam' => 'Afd.3',
		'Omzet' => $_POST['a3']
	),
	4 => array(
		'Naam' => 'Afd.4',
		'Omzet' => $_POST['a4']
	),
	5 => array(
		'Naam' => 'Afd.5',
		'Omzet' => $_POST['a5']
	),
	6 => array(
		'Naam' => 'Afd.6',
		'Omzet' => $_POST['a6']
		)
);


for ($i = 1; $i <= count($afdelingen); $i++) {
echo $afdelingen[$i]['Naam'].': '.$afdelingen[$i]['Omzet'].'<br />';
}

?>

Nu wil ik deze 6 afdelingen sorteren op de omzet per afdeling.
Hoe doe ik dit? Ik heb al een aantal dingen geprobeerd maar kom er niet uit.
 
je kan mogelijks al de
Code:
sort($array,$adds)
zijn parameters eens bekijken.
 
Heb al op php.net gekeken en de functies array_multisort arsort bekeken maar het lukt met niet.
 
Heb nu het volgende:

PHP:
<?php
function compare($x, $y)
{
 if ( $x['Omzet'] == $y['Omzet'] )
  return 0;
 else if ( $x['Omzet'] < $y['Omzet'] )
  return 1;
 else
  return -1;
}
$afdelingen = array(
	1 => array(
		'Naam' => 'Afd.1',
		'Omzet' => $_POST['a1']
	),
	2 => array(
		'Naam' => 'Afd.2',
		'Omzet' => $_POST['a2']
	),
	3 => array(
		'Naam' => 'Afd.3',
		'Omzet' => $_POST['a3']
	),
	4 => array(
		'Naam' => 'Afd.4',
		'Omzet' => $_POST['a4']
	),
	5 => array(
		'Naam' => 'Afd.5',
		'Omzet' => $_POST['a5']
	),
	6 => array(
		'Naam' => 'Afd.6',
		'Omzet' => $_POST['a6']
		)
);

usort($afdelingen, "compare");

for ($i = 1; $i <= count($afdelingen); $i++) {
echo  $afdelingen[$i]['Naam'].': '.$afdelingen[$i]['Omzet'].'<br />';
}


?>

Als antwoord krijg ik:

Code:
Afd.1: 900
Afd.2: 50
Afd.3: 30
Afd.5: 20
Afd.6: 1

Notice: Undefined offset: 6 in C:\xampp\htdocs\Opdracht6\opdracht6.php on line 41

Notice: Undefined offset: 6 in C:\xampp\htdocs\Opdracht6\opdracht6.php on line 41
:

Dit is hoe ik ze gesorteerd wil hebben alleen ontbreekt er 1 afdeling en krijg ik dus
het bericht: Undefined offset: 6.
Hoe krijg ik nu de hoogste waarde met de bijbehorende afdelingnaam getoond?
 
Laatst bewerkt:
Usort stelt alle keys opnieuw in, het klopt dat offset 6 niet bestaat, dat komt omdat de keys van 0 tot 5 lopen na usort, niet van 1 tot 6.

Als je je for loop aanpast zou het moeten werken. Als je de volgorde andersom wil moet je je compare functie aanpassen die andersom sorteert.
 
Bedankt!
Dat werkt, alleen krijg nu nog steeds die offset met de volgende code:

PHP:
<?php
function compare($x, $y)
{
 if ( $x['Omzet'] == $y['Omzet'] )
  return 0;
 else if ( $x['Omzet'] < $y['Omzet'] )
  return 1;
 else
  return -1;
}
$afdelingen = array(
	1 => array(
		'Naam' => 'Afd.1',
		'Omzet' => $_POST['a1']
	),
	2 => array(
		'Naam' => 'Afd.2',
		'Omzet' => $_POST['a2']
	),
	3 => array(
		'Naam' => 'Afd.3',
		'Omzet' => $_POST['a3']
	),
	4 => array(
		'Naam' => 'Afd.4',
		'Omzet' => $_POST['a4']
	),
	5 => array(
		'Naam' => 'Afd.5',
		'Omzet' => $_POST['a5']
	),
	6 => array(
		'Naam' => 'Afd.6',
		'Omzet' => $_POST['a6']
		)
);

usort($afdelingen, "compare");

for ($i = 0; $i <= count($afdelingen); $i++) {
echo  $afdelingen[$i]['Naam'].': '.$afdelingen[$i]['Omzet'].'<br />';
}


?>

Ik krijg wel alle afdelingen en goed gesorteerd, maar nog steeds :

Code:
Notice: Undefined offset: 6 in C:\xampp\htdocs\Opdracht6\opdracht6.php on line 41

Notice: Undefined offset: 6 in C:\xampp\htdocs\Opdracht6\opdracht6.php on line 41
:

Wat doe ik fout?
 
Je loopt te ver door. Je zegt $i <= count($array), als er 6 dingen in de array zitten ga je dus door $i gelijk is aan 6, maar 6 bestaat niet.

Als je dit gebruikt met een array vanaf moet je doorgaan tot $i < count( $array ) om niet eruit te lopen op de laatste key.
 
je zou ook een foreach kunnen gebruiken.
Dan loopt hij door de array en zal geen offset hebben.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan