Hoe je dingen aan JavaScript ophangt en hoe je dit in PHP behandelt en hoe je dit in de database opslaat staat in principe allemaal los van elkaar. Dit zijn ook aparte problemen/vraagstukken die je in afzondering kunt behandelen.
We zijn al een heel eind hoor.
Natuurlijk is het ook mogelijk om het op te slaan zoals jij voorstelt, maar dat lijkt mij gewoon een stuk omslachtiger.
En als je het dan toch geserialiseerd wilt doen, maak dan gebruik van JSON ofzo, zodat je dat in één klap kunt inpakken en uitpakken (en gebruiken) via json_encode() en json_decode().
Maar is het dan niet veel handiger om het nu dan zo op te slaan als ik voorstelde?
Lijkt me wel handiger omdat alles eigenlijk zover werkt en klaar is op deze code na.
Ik krijg de array al terug zoals jij voorstelde en die zet ik dan ook om naar php met json_decode().
Dat zijn dus de eerste array (mijn eigen waarvan de target random is), de source staat wel altijd in die volgorde.
En de tweede array die ik krijg nadat de user de verbindingen heeft gemaakt.
Ook is de optie die ik voorstelde voor mij wat makkelijker omdat ik dat zelf ook eenvoudiger kan aanpassen voor weer andere scripts.
Het doorlopen van de user array en het koppelen van de target met het image.
<?php
foreach ($userData as $source => $target) {
$sourceImage = $opdracht[$source];
$targetImage = $opdracht[$target];
// doe hier iets mee
// ...
}
?>
Als ik het op deze manier zou doen dan gaat het niet kloppen omdat de waarde van de source en target de plaats aangeven en niet het image. Dus als ik dit heb:
0 - 0
1 - 1
2 - 2
3 - 3
Dan zou ik voor de linkerrij de images kunnen zetten (322b 322aa 322ab 322ac), maar voor de rechterrij is dat anders omdat de waarde dan een ander image heeft.
De waardes van de source en target geven dus de plaats van hetzelfde image aan, niet het image zelf..
0 source is hetzelfde image als target 0
1 source is hetzelfde image als target 3
2 source is hetzelfde image als target 2
3 source is hetzelfde image als target 1
Hierbij is de target ook random dus die staan qwa waarde niet vast.
De source zetten met opdracht[$source] gaat wel goed maar dan....
Want de 3 target is niet hetzelfde als 3 source want 3 target zou opdracht[1] moeten zijn.
<?php
foreach ($array as $data) {
$sourceImage = $opdracht[$data['source']];
$targetImage = $opdracht[$data['target']];
// ... et cetera ...
}
?>
$data is de value van het key-value paar van $array. In dit geval is dat dus een enkele rij / subarray. Dit is dus zelf ook weer een array dus kun je die ook als zodanig gebruiken. $data['source'] bevat de index van de bron-index/afbeelding en $data['target'] die van de doel-index/afbeelding. Beide indexen pas je toe op $opdracht om de bijbehorende afbeelding te vinden.
Misschien loont het de moeite om wat meer te oefenen met (geneste) arrays?
Maar er is in principe geen verschil tussen:
<?php
array(
'source' => 3,
'target' => 1,
);
?>
Ten opzichte van:
<?php
array(3 => 1);
?>
In die zin dat het ene array meer zinvolle informatie zou "transporteren" dan de ander, het is simpelweg een andere manier van verpakken.
Het is meestal handig om alles zo compact mogelijk te houden, zodat je later minder werk hebt aan "overhead" (source, target etc.) die je mogelijk anders zou hebben. De code die hierop werkt wordt dan ook langer zoals het bovenstaande fragment demonstreert, terwijl het functioneel precies hetzelfde doet.