Simpel , ik heb array $orderArray waar de info in zit en moet gesorteerd worden door $array die de volgorde bepaalt.
Heb dit stukje ergens gevonden dat aan mijn vraag zou moeten voldoen. Dit na tevergeefse pogingen die geen oplossing boden.
Dit stukje geeft helaas enkel het woord 'Array' weer !


$array = array('2', '1', '5', '4', '3');
$orderArray = array('linka', 'linkb', 'linkc', 'linkd', 'linke');

function sortArrayByArray($array,$orderArray) {
$ordered = array();
foreach($orderArray as $key => $value) {
if(array_key_exists($key,$array)) {
$ordered[$key] = $array[$key];
unset($array[$key]);
}
}
return $ordered + $array;
}


$array = array('2', '1', '5', '4', '3');
$orderArray = array('linka', 'linkb', 'linkc', 'linkd', 'linke');

echo sortArrayByArray($array,$orderArray);
Omdat het een array is?

$newArray = sortArrayByArray($array,$orderArray);
foreach ($newArray as $item){
	echo $item .'<br/>';
}
voor het weergeven van array content (als het om te debuggen / voor jezelf is) zou ik lekker print_r gebruiken :) No offence maar anders komt TS straks terug met een multi dimentionale (damn hopelijk heb ik dat goed geschreven :P) array en een vraag met exact dezelfde stekking :)
Je hebt nu 1 t/m 5 in de array waarmee je sorteerd. Je mist nu linka omdat de sleutels vanaf 0 beginnen. Je moet dus 0 t/m 4 gebruiken in dit voorbeeld.
Heb de teller ook op 0 gebracht, resultaat is zelfde wat niet normaal is.
Resultaat blijft steeds : linka linkb linkc linkd linke
Terwijl er eerst index 2 moet zijn (linkc), dan index 1 (linkb)... Dit is het gewenste resultaat.

Dit doe ik omdat men linken in een menu zelf een volgorde mee kan geven. En voor andere doeleinden in mijn project heb ik dit ook nodig.


foreach($orderArray as $key => $value) { -> toch voor het cijfertje te kennen ?
if(array_key_exists($key,$array)) -> check indien er ook een index bestaat voor $array (dus begint vanaf 0, 1, 2...), ja toch ?
Probeer m zo eens

<?php
function sortArrayByArray($array,$orderArray) {

$ordered = array();
foreach($orderArray as $key => $value) {
echo $value."<br/>";
if(array_key_exists($value,$array)) {
$ordered[$value] = $array[$value];
}
}
return $ordered;
}

?>

[size=xsmall]Toevoeging op 24/04/2012 13:04:25:[/size]

Sorry,

dit is beter

<?php
function sortArrayByArray($array,$orderArray) {

$ordered = array();
foreach($orderArray as $key => $value) {
echo $value."<br/>";
if(array_key_exists($value,$array)) {
$ordered[] = $array[$value];
}
}
return $ordered;
}
?>
Resultaat is nu het gewenste resultaat. Nu ga ik deze 2 functies (originele) en die van jou eens goed met elkaar vergelijken om te begrijpen. Dank je zeer.

Ter info : $ordered[] of $ordered[$value] geeft hetzelfde resultaat
niet helemaal kijk maar goed
<?php
$array = array('2', '1', '5', '4', '3');
$orderArray = array('linka', 'linkb', 'linkc', 'linkd', 'linke');

$alles = array();
foreach($array as $key => $value)
{
$alles[$value] = $orderArray[$key];
}
ksort($alles);
echo '<pre>' . print_r($alles, true) . '</pre>';
asort($alles);
echo '<pre>' . print_r($alles, true) . '</pre>';
?>

Ik heb hier beiden array()'s samengevoegd in één array().
Met ksort() sorteer je op array('2', '1', '5', '4', '3')
En met asort() op array('linka', 'linkb', 'linkc', 'linkd', 'linke')
Ik was aan ongeveer hetzelfde aan het denken. Er is echter geen foreach hiervoor nodig.


<?php

	#| Settings :: Array met de menu links.

		$links = array('linka', 'linkb', 'linkc', 'linkd', 'linke');

	
	#| Settings :: Array met daarin de volgorde van de menu links.
	
		$order = array(1, 0, 4, 3, 2);
	
	
	#| De menu links op volgorde zetten.
	
		$ordered_links = array_combine($order, $links);
	
	
	#| De links staan nu op volgorde maar de sleutels niet. Eventjes sorteren dus.
	
		ksort($ordered_links);
	
?>
@Mark: Netjes. Echter heb ik in mijn testomgeving nog geen php5, dus ik heb geen array_combine(), en ik kende het ook nog niet.

Reageren