Ik heb nog niet helemaal door wat je bedoelt. Maar als ik je voorbeeld code zie, als je de session lrij loopt, kan je op deze manier de bijbehorende image krijgen:
Huh? Dit komt dan toch gewoon overeen met de key van het afbeelding-array?
Maar je wilt niet dat de afbeeldingen elke keer in dezelfde volgorde staan wel? Daarom is het mogelijk een idee om de "links" en "rechts" arrays weer te sorteren op value, met behoud van de key-value associatie.
Heb je dus bijvoorbeeld:
0 => 3
1 => 0
2 => 2
3 => 1
Dan kun je hier met behulp van asort() het volgende van maken:
1 => 0
3 => 1
2 => 2
0 => 3
Vervolgens kun je de afbeeldingen op volgorde weergeven met behulp van:
<?php
foreach ($leftArray as $index => $node) {
// gebruik hier $index om de corresponderende afbeelding weer te geven
}
?>
Ik zie trouwens "opdracht" en "groep12" staan.
Zijn wij hier stap voor stap jouw huiswerk voor je aan het maken?
EDIT: dit was dus wederom een soort van sorteerprobleem en wederom bestond hier een eenvoudige functie voor waarmee je dit in 1x kunt tacklen. Als je nu de volgende keer eerst uitdenkt wat er functioneel zou moeten gebeuren en vervolgens ff op php.net zoekt naar functies die arrays kunnen manipuleren? :p
Ik heb alles nu bijna werkend op een deel van de foutafhandeling na.
Ik kan wel controleren of de gemaakte verbindingen goed zijn of niet, ook kan ik laten zien welke verbindingen niet goed zijn. Wat ik nu nog niet voor elkaar krijg is:
Als een verbinding niet klopt wil ik later laten zien welke twee images niet goed waren.
Ik zal onder mijn arrays eens laten zien:
De sourcewaarde staat hier voor een image die ik haal uit:
Zoals je ziet zijn de verbindingen 2 en 3 (target) niet juist.
Ik wil nu ook een array krijgen (van de user vebindingen) waar voor elke verbinding de images in staan, dus op deze manier:
Zou het niet veel makkelijker zijn als je in dat laatste array ook gewoon met indexen werkt? Je krijgt dan eigenlijk precies het voorlaatste array?
Welke afbeeldingen voor de source en target op die positie staan staat hier in principe los van.
Sterker nog, deze is dus afleidbaar uit het $opdracht array en het voorlaatste array, maar het is dus niet per se nodig om hier (expliciet) een apart array voor te bouwen?
Ter verduidelijking: als je geen indexen specificeert in een array zoals $opdracht, dan worden deze vanaf 0 geïndexeerd.
De laatste array hoeft ook niet perse hoor.
Ik krijg het niet voor elkaar om de juiste images te koppelen (voorlaatste array is de array die ik nu ook heb).
Ik begrijp alleen het koppelen van de indexen met de value niet.
De eerste array gaat ook goed en ik heb erachter gezet welk image dan gekoppeld wordt.
Maar dan de tweede array juist koppelen met het image lukt niet.
Ik heb het nu zo geprobeerd zonder een array (wat voor mij nog beter is want ik wil het zo in de database opslaan):
Ugh, ik zou dit niet zo geserialiseerd opslaan, want dan moet je dat na afloop weer uit elkaar peuteren. Dat is niet waar een database voor bedoeld is :p.
Ik zou dit alles (of op zijn minst: de koppelingen die de gebruiker legt) ook niet aan afbeeldingen ophangen, maar aan de volgnummers/indexen. Welke afbeelding hier bij hoort staat hier (nogmaals) los van (en is meer onderdeel van de "goede oplossing").
Als de volgorde van zowel de sources alsook de targets random is, dan zul je beide stukken informatie moeten opslaan, te meer als je deze "random volgorde" wilt vastleggen?
Overigens, als je uitgaat van het tweede array, komt dan de key van het subarray dan niet altijd overeen met de source-waarde? En zelfs als dit niet het geval is, zou je dit kunnen vereenvoudigen tot een array met een dimensie minder, waarbij je een mapping <source> => <target> maakt? Je kunt dit dus nog wel wat verder platslaan allemaal.
Bij het opstellen van bijbehorende datastructuren (vertalingen naar arrays) helpt het enorm als je alles zo simpel mogelijk houdt.
Uitgaande van de volgende opzet:
<?php
/*
het volgende is dus equivalent met
$userData = array(
0 => 0,
1 => 3,
2 => 2,
3 => 1,
)
*/
$userData = array(0, 3, 2, 1);
/*
nota bene, als de sources ook een random volgorde hebben, zou je hier prima het volgende van kunnen maken:
$userData = array(1 => 3, 0 => 0, 3 => 1, 2 => 2);
of wat dan ook
*/
?>
Zou je zoiets kunnen doen:
<?php
foreach ($userData as $source => $target) {
$sourceImage = $opdracht[$source];
$targetImage = $opdracht[$target];
// doe hier iets mee
// ...
}
?>
Maar nogmaals, ik zou de gegeven antwoorden niet als "afbeelding" opslaan, maar simpelweg als een volgnummer voor de geselecteerde afbeelding. Welke afbeelding dit is (en in welke volgorde deze staan) houd je ergens anders bij.
Ik begrijp wat je bedoeld maar als de hele boel overhoop moet dan gaat dat lastig worden omdat er ook nog javascript achter zit waar ik niets van begrijp.
Vandaar ook dat ik het op de gevraagde manier probeerde op te lossen omdat het wel goed werkt met de scrpts.
Wel daargelaten of het op de juiste manier is gedaan....
Als er geen makkelijke oplossing is om de koppelingen te bewaren in de database dan moet ik dat laten varen. Wat ook een mogelijkheid is om iemand tegen betaling de scripts werkend te laten maken, cq om te bouwen.
De antwoorden komen van het script uit mijn andere vraag: