3
votes

Comment inverser un ensemble de chaînes délimitées par des virgules et les renvoyer dans l'ordre d'origine en PHP?

Voici le code que j'ai jusqu'à présent. Je viens de commencer à apprendre PHP aujourd'hui et je ne sais pas pourquoi mon code ne fonctionne pas.

<?php

function backwards($input)
{
    $str = $input;
    $revStr = "";
    $str = explode(",",$str);
    for($x = 0; $x < count($str); $x++){
        if($x == count($str) - 1){
            $revStr .= strrev($str[$x]);
        }
        else{
            $revStr .= strrev($str[$x]) . ",";
        }
    }
    return $revStr;
}

Toute aide serait grandement appréciée!

edit: Voici un exemple d'entrée

phP,syarrA,lqsyM

voici ce que je voudrais que la sortie soit:

Php,Arrays,Mysql

edit2:

Je l'ai compris. Fait quelques modifications mineures. Je ne sais pas si c'est le code le plus efficace, mais cela fonctionne.

<?php

function backwards($input)
{
    $str = $input;
    $revStr = "";
    $str = explode(",",$str);
    for($x = 0; $x < strlen($str); $x++){
        $revStr .= strrev($str[$x]);
    }
    return $revStr;
}

php

4 commentaires

Pouvez-vous ajouter une chaîne d'exemple


strlen () renvoie la longueur de la chaîne, ce que vous passez à l'intérieur est un tableau, ce que vous voulez c'est count ()


J'ai ajouté la réponse sur la base du lien fourni, veuillez vérifier.


Pourquoi ne puis-je pas marquer mon titre comme résolu?


5 Réponses :


1
votes

Vous vérifiez la longueur de chaîne d'un tableau à l'intérieur de votre boucle for. De plus, une fonction personnalisée n'est pas nécessaire, PHP nous fournit strrev () .

Mais si vous souhaitez utiliser le vôtre:

function backwards($input)
{
    $str = $input;
    $revStr = "";
    $str = explode(",",$str);
    for($x = 0; $x < count($str); $x++){
        $revStr .= strrev($str[$x]);
    }
    return $revStr;
}

$string = "Php,Arrays,Mysql";
echo backwards($string);

J'espère que cela vous aidera,


0 commentaires

1
votes

Vous devez utiliser count au lieu de strlen code> et doivent également prendre une chaîne inversée en tableau, puis la convertir en chaîne.

Vous pouvez essayer ce code:

<?php

function backwards($input)
{
    $str = $input;
    $revStr = array();
    $str = explode(",", $str);
    for ($x = 0; $x < count($str); $x++) {
        $revStr[] = strrev($str[$x]);
    }
    return implode(',', $revStr);
}
$str = "Php,Arrays,Mysql";
var_dump(backwards($str));


0 commentaires

2
votes

Modifier, je vois que vous avez maintenant inclus un exemple.
Utilisez array_map et strrev pour inverser les mots.
Utilisez exploser et imploser pour créer un tableau de mots et revenir en chaîne.

echo implode(",", array_reverse(explode(",", $str))); 

https: / /3v4l.org/tr7d6


Je pense que vous devriez utiliser array_reverse sur la chaîne éclatée.
Ensuite, vous pouvez l'imploser en une chaîne.
$str = "apple,orange,tomato";

$arr = explode(",", $str);
$arr =array_reverse($arr);
echo implode(",", $arr); //tomato,orange,apple

https://3v4l.org/Hvd9m

Ou , légèrement plus désordonné mais compact:

echo implode(",", array_map(function($part){ return strrev($part);},explode(",", $str)));

https://3v4l.org / LTu90


0 commentaires

1
votes

utilisez $ str [0] dans la syntaxe de la boucle for.

like this => for($x = 0; $x < strlen($str[0]); $x++)


1 commentaires

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse. Lisez ceci .



1
votes

Juste quelques modifications et vous obtenez la sortie souhaitée. Vous pouvez utiliser la fonction explode et implode de php avec array_push pour obtenir votre résultat:

<?php

$string = "Php,Arrays,Mysql";

function backwards($input)
{
    $str = $input;
    $revStr = array();
    $str = explode(",", $str);
    for ($x = 0; $x < count($str); $x++) {
        array_push($revStr, strrev($str[$x]));
    }
    return implode(',', $revStr);
}

$result =backwards($string);

echo $result;

?>


0 commentaires