Ik heb een array met images die ik wil koppelen aan een nummer in de linker en rechterkolom, heeft iemand een idee hoe ik dat kan doen?


$_SESSION['opdracht']

Array
(
    [0] => 012b
    [1] => 012aa
    [2] => 012ab
    [3] => 012ac
)

$_SESSION['lrij']

Array
(
    [0] => 3
    [1] => 0
    [2] => 2
    [3] => 1
)

$_SESSION['rrij']

Array
(
    [0] => 1
    [1] => 2
    [2] => 0
    [3] => 3
)


Het is de bedoeling dat het dan zo gekoppeld wordt met bijvoorbeeld een foreach.

linkerkolom en rechterkolom - image

Aan het nummer 3 en 1 - 012b
Aan het nummer 0 en 2 - 012aa
Aan het nummer 2 en 0 - 012ab
Aan het nummer 1 en 3 - 012ac

Ik heb het zo geprobeerd maar dat kan natuurlijk niet want dan worden niet de juiste images geplaatst.


$i=1;
foreach ($_SESSION['lrij'] as $lrij_image) {
			
	$denod = $i - 1;
				
	echo '<div class="node"><img src="img/groep12/combinatiespel/'.$_SESSION['opdracht'][$lrij_image].'.png" width="50" height="50" alt=""/>';
	echo '<span class="node'.$i.'" data-connect="false" data-id="'.$denod.'" data-use="false" data-connected-to=""></span></div>';
	$i++;
}



Hopelijk is het zo duidelijk wat de bedoeling is.
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.

Dus heb je een oplossing voor me... graag :)
Je hebt alle puzzelstukken al. De waarden van de "source"s en de "target"s komen overeen met de indices van de afbeeldingen.

Waar loop je precies op vast?
Waar loop je precies op vast?

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..


Uitgaande van deze array:

Array
(
    [0] =&gt; Array
        (
            [source] =&gt; 0
            [target] =&gt; 0
        )

    [1] =&gt; Array
        (
            [source] =&gt; 1
            [target] =&gt; 3
        )

    [2] =&gt; Array
        (
            [source] =&gt; 2
            [target] =&gt; 2
        )

    [3] =&gt; Array
        (
            [source] =&gt; 3
            [target] =&gt; 1
        )

)

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.

Uitgaande van het bovenstaande array:
<?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.

Reageren