0
votes

Supprimer la dernière virgule de la chaîne avec des pauses de ligne

i Créez une chaîne avec des pauses de ligne à partir d'autres chaînes à l'aide d'un de boucle code> et en fonction des chiffres donnés dans une variable, je concaténate les chaînes. Comme ceci:

$Medio=''; //variable to handle the result

$MedioPago='12345'; //variable with numbers given

$chars = str_split($MedioPago); //split the numbers


foreach($chars as $char)
{
    if($char=='1')
    {
        $Medio.='"codigo": "01",'.PHP_EOL;
    }
    else if($char=='2')
    {
        $Medio.='"codigo": "02",'.PHP_EOL;
    }
    else if($char=='3')
    {
        $Medio.='"codigo": "03",'.PHP_EOL;
    }
    else if($char=='4')
    {
        $Medio.='"codigo": "04",'.PHP_EOL;
    }
    else if($char=='5')
    {
        $Medio.='"codigo": "05",'.PHP_EOL;
    }   
}

$Medio = rtrim($Medio,',');

php

2 commentaires

Vous auriez pu rtrim () la dernière pause de la ligne aussi.


@Alexhowansky C'est ça, je n'ai pas pensé à éliminer la dernière pause de la ligne avant de retirer la dernière virgule.


4 Réponses :


1
votes

Vous pouvez utiliser substr xxx


2 commentaires

Cela ne va-t-il pas simplement supprimer la pause de la ligne et non la virgule également (aussi php_eol peut être 2 caractères)


Oui, je ne voudrais juste pas avoir php_eol quand j'ai testé dans ma machine. Donc, dans le cas de l'OP, il devrait utiliser substr ($ Medio, 0, -3);



1
votes

La logique que j'aime utiliser pour des scénarios comme ceci est d'imprimer de manière conditionnelle la virgule plus eol avant em> chaque terme annexé, mais uniquement si ce terme est pas em> le premier Être ajouté:

$Medio = NULL;
$MedioPago = '12345';
$chars = str_split($MedioPago);

foreach ($chars as $char) {
    if ($Medio != NULL) {
        $Medio.=','.PHP_EOL;
    }

    if ($char == '1') {
        $Medio.='"codigo": "01"';
    }
    else if ($char == '2') {
        $Medio.='"codigo": "02"';
    }
    else if ($char == '3') {
       $Medio.='"codigo": "03"';
    }
    else if ($char == '4') {
        $Medio.='"codigo": "04"';
    }
    else if ($char == '5') {
        $Medio.='"codigo": "05"';
    }   
}


0 commentaires

2
votes

Chaque fois que vous construisez une chaîne séparée par des virgules, je trouve qu'il est préférable de créer un tableau contenant les éléments, puis d'utiliser implorez () code> pour les rejoindre. Cela évitera la nécessité de supprimer la dernière virgule ou tout code étranger pour suivre l'itération que vous allez. De plus, chaque fois que vous avez des instructions répétitives si / else comme ceci, essayez de trouver ce qui est similaire entre eux et utilisez une boucle à la place:

$list = [];
foreach (str_split($MedioPago) as $char) {
    $list[] = sprintf('"codigo": "%02d"', $char);
}
$Medio = implode(",\n", $list);


0 commentaires

0
votes

C'est ce que j'ai fini par faire: je viens d'ajouter $ Medio = rtrim ($ Medio, ','. php_eol) code> Pour supprimer la dernière pause de la ligne avant de supprimer la dernière virgule que Alex HOWNANSKY a signalé .

$Medio=''; //variable to handle the result

$MedioPago='12345'; //variable with numbers given

$chars = str_split($MedioPago); //split the numbers


foreach($chars as $char)
{
    if($char=='1')
    {
        $Medio.='"codigo": "01",'.PHP_EOL;
    }
    else if($char=='2')
    {
        $Medio.='"codigo": "02",'.PHP_EOL;
    }
    else if($char=='3')
    {
        $Medio.='"codigo": "03",'.PHP_EOL;
    }
    else if($char=='4')
    {
        $Medio.='"codigo": "04",'.PHP_EOL;
    }
    else if($char=='5')
    {
        $Medio.='"codigo": "05",'.PHP_EOL;
    }   
}

$Medio = rtrim($Medio,','.PHP_EOL);


3 commentaires

Remarque Vous n'avez pas besoin de deux appels vers RTRIM () - Le deuxième paramètre peut contenir plusieurs caractères à couper.


@Alexhowanskyhow puis-je ajouter php_eol à rtrim () ?


rtrim ($ str, ", \ n") ou rtrim ($ str, ','. php_eol)