Excuse moi, mais c'est un peu le capharnaum ton code
Ben non, il est correct, merci quand même du compliment
D'abord je ne vois pas en quoi ta fonction demande un traitement récursif, ou alors j'ai rien compris

Je veux faire un traitement récursif, car ça déconne, sinon je m'embêterais pas avec ça.
En testant ce code par exemple:
$arrSel = array(1=>1, 2, 3, 4, 5);
$arrX = array(1=>2,4,6,10,12);
$arrY = array(1=>3,7,9,11,13);
function selVal( $arrX, $arrY )
{
global $arrSel;
$newArr = array_diff($arrSel, $arrX, $arrY);
#
echo "newArr vaut: ".print_r($newArr);"\n";
#
shuffle($newArr);
#
echo "newArr vaut maintenant apres shuffle: ". print_r($newArr);"\n";
#
$selVal = $newArr[0];
#
echo "selVal vaut: ". $selVal."\n";
#
return $selVal;
}
$val = selVal($arrX, $arrY);
echo ' => valeur sélectionnée: ' . $val . '<br>';
Oui, mais là tu défini les valeus de $arrX et arrY comme des chaines, alors que dans mon cas ce sont des arrays.
On s'appercoit que ta fonction effectue bien le traitement demandé et renvoie bien 5 ou 1. Par contre, elle ne traite pas les cas ou array_diff ne renverra rien (en supposant que les 3 tableaux contiennent les même valeurs)! Et ce n'est pas avec un traitement récursif que ca changera quoi que ce soit
Mais dans mon script array_diif doit obligatoirement me renvoyer une valeur, c'est logique.
Ensuite dans ton code du dessous, ici plus précisément:
for( $x=1; $x<=5; $x++ )
{
for( $y=1; $y<=5; $y++ )
{
$val = selVal($arrX[$x], $arrY[$y]);
etc
tu passes en paramètres non pas les 2 tableaux demandés par la fonction, mais un élément de chacun des 2 tableaux (donc un entier, je suppose) alors que la fonction demande bien 2 tableaux!
Un peu plus loin, tu écris:
echo implode($arrX[$x]);
Alors que implode demande aussi un array et non pas un élément de celui-ci (même faute)
etc etc
Revoit un peu tout ça

Comme je l'ai dit $arrX et $arrY contiennent des arrays.
Donc $arrX[$x] est bien un tableau.
C'est vrai, j'aurais du initialiser les arrays.
Je remet mon code, ce coup si ça fonctionne presque, mais la moitié du temps, ça ne me renvoi rien
Décidément, je comprends pas pourquoi ça déconne comme ça.
for( $i=1; $i<=5; $i++ )
{
$arrX[$i] = array();
$arrY[$i] = array();
}
$arrSel = array(1=>1, 2, 3, 4, 5);
function selVal( $arrX, $arrY )
{
global $arrSel;
$newArr = array_diff($arrSel, $arrX, $arrY);
if( count($newArr) == 1 )
return implode('', $newArr);
if( count($newArr) == 0 )
return selVal($arrX, $arrY );
shuffle($newArr);
return $newArr[0];
}
for( $x=1; $x<=5; $x++ )
{
for( $y=1; $y<=5; $y++ )
{
$val = selVal($arrX[$x], $arrY[$y]);
$arrX[$x][$y] = $val;
$arrY[$y][$x] = $val;
echo implode($arrX[$x]);
echo ' => valeur sélectionnée: ' . $val . '<br>';
}
echo '<br><br>';
}
echo '<table>';
$i=1;
foreach( $arrX as $ligne )
{
echo '<tr>';
foreach( $arrX[$i] as $cel )
{
echo '<td>' . $cel . '</td>';
}
echo '</tr>';
$i++;
}
echo '</table>';
Pourquoi dans la fonction faire un appel à elle même ?
Testez en enlevant le
if( count($newArr) == 0 )
return selVal($arrX, $arrY );
Et vous aurez des
Notice: Undefined offset: 0
Voilà, si vous avez une

pour parer ce problème.
Merci en tout cas de votre aide.