Ho questo codice:
function findWinningCard($playedCards)
{
$valoriCarte = array(
"Asso" => array("Denare" => 11, "Spade" => 11, "Coppe" => 11, "Bastone" => 11),
"Tre" => array("Denare" => 13, "Spade" => 13, "Coppe" => 13, "Bastone" => 13),
"Due" => array("Denare" => 12, "Spade" => 12, "Coppe" => 12, "Bastone" => 12),
"Re" => array("Denare" => 10, "Spade" => 10, "Coppe" => 10, "Bastone" => 10),
"Cavallo" => array("Denare" => 9, "Spade" => 9, "Coppe" => 9, "Bastone" => 9),
"Fante" => array("Denare" => 8, "Spade" => 8, "Coppe" => 8, "Bastone" => 8),
"Sette" => array("Denare" => 7, "Spade" => 7, "Coppe" => 7, "Bastone" => 7),
"Sei" => array("Denare" => 6, "Spade" => 6, "Coppe" => 6, "Bastone" => 6),
"Cinque" => array("Denare" => 5, "Spade" => 5, "Coppe" => 5, "Bastone" => 5),
);
$maxValore = -1;
$winningCardIndex = -1; // Dichiarazione della variabile
$semePredominante = explode(".", $playedCards[0])[1]; // Seme della prima carta giocata
$firstCardOfSeme = null;
foreach ($playedCards as $index => $carta) {
// Rimuovi l'estensione ".png" dal nome del file della carta
$nomeCarta = basename($carta, ".png");
// Dividi il nome della carta e il seme
list($nomeCarta, $semeCarta) = splitNameAndSuit($nomeCarta);
echo "Nome è: " . $nomeCarta . " Seme: " . $semeCarta . "<br>";
if ($semeCarta === $semePredominante) {
// La carta ha il seme predominante, confrontala con le altre
if ($firstCardOfSeme === null) {
// Questa è la prima carta del seme predominante giocata
$firstCardOfSeme = $carta;
}
$valore = $valoriCarte[$nomeCarta][$semeCarta];
if ($valore > $maxValore) {
$maxValore = $valore;
$winningCardIndex = $index;
}
}
}
// Se non ci sono carte del seme predominante, restituisci l'indice della prima carta giocata
if ($winningCardIndex === -1 && $firstCardOfSeme !== null) {
$winningCardIndex = array_search($firstCardOfSeme, $playedCards);
}
return $winningCardIndex;
}
function splitNameAndSuit($filename) {
$name = "";
$suit = "";
$length = strlen($filename);
for ($i = $length - 1; $i >= 0; $i--) {
$char = $filename[$i];
if (ctype_upper($char)) {
// Se il carattere è maiuscolo, allora abbiamo trovato il seme della carta
$name = substr($filename, 0, $i);
$suit = substr($filename, $i);
break;
}
}
return array($name, $suit);
}
e lo richiamo in questo modo...
$playedCards = array("SeiDenare.png", "TreCoppe.png", "DueDenare.png", "TreSpade.png");
$winningCardIndex = findWinningCard($playedCards);
echo "Indice carta vincente è: " . $winningCardIndex;
spiego cosa dovrebba fare che non riesco a farglelo fare....
La funzione findWinningCard ha il compito di trovare l'indice della carta vincente all'interno dell'array $playedCards, dato l'array delle carte giocate. Per farlo, la funzione utilizza l'array associativo $valoriCarte che contiene i valori numerici delle diverse carte.
Il processo principale della funzione è il seguente:
Viene inizializzata la variabile $winningCardIndex con il valore -1.
Questa variabile conterrà l'indice della carta vincente nell'array $playedCards.
Viene estratto il seme della prima carta giocata dalla variabile $playedCards[0] utilizzando explode(".", $playedCards[0])[1].
Questo seme viene memorizzato nella variabile $semePredominante.
Viene inizializzata la variabile $firstCardOfSeme con il valore null. Questa variabile sarà utilizzata per memorizzare la prima carta giocata con il seme predominante.
Viene eseguito un ciclo foreach per iterare tutte le carte giocate nell'array $playedCards.
Per ogni carta, viene utilizzata la funzione splitNameAndSuit per ottenere il nome della carta e il seme.
Se il seme della carta corrente è uguale al seme predominante, allora la carta appartiene al seme predominante e viene confrontato il valore numerico della carta.
Se il valore numerico della carta corrente è maggiore del valore massimo trovato finora ($maxValore), viene aggiornato $maxValore con il nuovo valore numerico e viene aggiornato $winningCardIndex con l'indice della carta corrente.
Alla fine del ciclo, se non sono state trovate carte con il seme predominante, la variabile $winningCardIndex rimarrà -1.
In questo caso, viene verificato se è stata giocata almeno una carta con il seme predominante ($firstCardOfSeme).
Se sì, viene utilizzata la funzione array_search per trovare l'indice di $firstCardOfSeme nell'array $playedCards e questo indice viene assegnato a $winningCardIndex.
Infine, la funzione restituisce l'indice della carta vincente nell'array $playedCards.
La funzione splitNameAndSuit serve a dividere il nome della carta e il seme.
Utilizza un ciclo per iterare all'indietro sulla stringa del nome della carta fino a quando trova il primo carattere maiuscolo, che indica l'inizio del seme. Quindi, utilizza la funzione substr per ottenere il nome della carta fino a quel punto e il seme dal punto in cui è stata trovata la prima lettera maiuscola.
MI RITORNA SEMPRE INDICE -1 IN QUESTO CASO DOVREBBE DARMI INDICE 2 (DueDenare)