Hoi,

Ik probeer 4 unieke verbindingen in een array te krijgen maar denk dat d econtrole niet goed werkt.
Iemand een idee wat er fout gaat?


<?php

$_SESSION['antwoorden'] = array ();

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }
    return false;
}

do {
	
	do {
			
		$source = rand (0, 3);
		$target = rand (0, 3);
			
		$verbinding = (array("source" => $source, "target" => $target));
	
	} while (in_array_r($verbinding, $_SESSION['antwoorden']) === true);

	// zet de verbindingen in de antwoorden array
	array_push ($_SESSION['antwoorden'], $verbinding);
		
} while (count($_SESSION['antwoorden']) < 4);
?>
Misschien is het handig om wat meer te vertellen wat er fout gaat, wat je invoert, en wat er gebeurt, en wat je verwacht?

Tot nu toe is dit nog best een karig 'glazen bol' topic.
Zet foutmeldingen aan en je krijgt paginas foutmeldingen.

In plaats van $_SESSION['antwoorden'] gebruik $antwoorden = [];

Dan voor het resultaat :

 echo '<pre>' . print_r( $antwoorden , TRUE ) . '<pre>'; 


[size=xsmall]Toevoeging op 27/05/2020 14:28:14:[/size]

Zo dus

<?php
$antwoorden = [];

do {
	do {
		$source = rand (0, 3);
		$target = rand (0, 3);

		$verbinding = ( array( "source" => $source, "target" => $target) );
	} while ( in_array_r( $verbinding, $antwoorden ) === true );

	// zet de verbindingen in de antwoorden array
	array_push ( $antwoorden, $verbinding );
        
} while ( count( $antwoorden ) < 4 );

echo '<pre>' . print_r( $antwoorden , TRUE ) . '<pre>'; 

?>
Wat maakt het verschil met $antwoorden = []; en $_SESSION['antwoorden'] ????
Omdat de stille hint niet doorkwam.

 
Warning: Invalid argument supplied for foreach() in checkneedle.php on line 4 Warning: array_push() expects parameter 1 to be array, null given in checkneedle.php on line 26 Warning: count(): Parameter must be an array or an object that implements Countable in checkneedle.php on line 28 Warning: Invalid argument supplied for foreach() in checkneedle.php on line 4 Warning: array_push() expects parameter 1 to be array, null given in checkneedle.php on line 26 Warning: count(): Parameter must be an array or an object that implements Countable in checkneedle.php on line 28 Warning: Invalid argument supplied for foreach() in checkneedle.php on line 4 Warning: array_push() expects parameter 1 to be array, null given in checkneedle.php on line 26 Warning: count(): Parameter must be an array or an object that implements Countable in checkneedle.php on line 28 Warning: Invalid argument supplied for foreach() in checkneedle.php on line 4 Warning: array_push() expects parameter 1 to be array, null given in checkneedle.php on line 26 Warning: count(): Parameter must be an array or an object that implements Countable in checkneedle.php on line 28 Warning: Invalid argument supplied for foreach() in checkneedle.php on line 4 Warning: array_push() expects parameter 1 to be ar.....
Pagina na pagina
Wel vreemd, want ik heb deze functie vaker gebruikt zonder problemen.

Nog steeds zijn de 4 verbindingen niet uniek.


Array
(
    [0] => Array
        (
            [source] => 3
            [target] => 0
        )

    [1] => Array
        (
            [source] => 0
            [target] => 2
        )

    [2] => Array
        (
            [source] => 1
            [target] => 1
        )

    [3] => Array
        (
            [source] => 3
            [target] => 1
        )

)

2x een source 3 en target 1
Dit is prima te doen met standaard array-functies?
<?php
$source = range(0, 3);
$target = range(0, 3);
shuffle($source);
shuffle($target);

$data = array();
foreach ($source as $k => $v) {
    $data[] = array(
        'source' => $v,
        'target' => $target[$k],
    );
}

echo '<pre>'.print_r($data, true).'</pre>';
?>
Thanks Thomas, weer wat geleerd dat er meerdere wegen naar een goed script leiden :)

Reageren