Separate values from a string and perform a function with it

3

Hello,

I have a string that has a value of zero ( $contador = 0; ), other than the value is three ( $vezes = 3; ) and another that is $numeros = "13|123456789\n14|123456780\n" .

I want PHP to do a function (example echo(); ) until the string $contador arrives at three, and do this function with the 2 values in the string $numeros , eg:

$ddd = 13; //Pega o valor 13 da string $numeros
$numero = 123456789; //Pega o valor 123456789 da string $numeros
echo "Meu DDD é $ddd e meu celular é $numero!";
//Resposta (vai repetir a função echo acima 3 vezes graças ao valor da string $vezes):
// Meu DDD é 13 e meu celular é 123456789!
// Meu DDD é 13 e meu celular é 123456789!
// Meu DDD é 13 e meu celular é 123456789!

Same thing with the second value of string $numeros . And when the value of string $contador reaches three, the script stops.

I could not think of anything that would do this, thank you to all of you!

    
asked by anonymous 21.08.2016 / 21:26

3 answers

2

Use explode :

$numeros = "13|123456789\n14|123456780\n";

$contador = 0;
$vezes = 3;

while ($contador < $vezes) {
    $linhas = explode("\n", $numeros);

    foreach($linhas as $linha){
        list($ddd, $numero) = array_pad(explode('|', $linha, 2), 2, null);

        if (isset($ddd, $numero)){
            echo "Meu DDD é $ddd e meu celular é $numero!\n";
        }
        $contador++;
    }

}

// Meu DDD é 13 e meu celular é 123456789!
// Meu DDD é 14 e meu celular é 123456780!

View demonstração

    
21.08.2016 / 21:49
2

What you want to do is loop, there are several ways to do this and several topics about it here.

If the string holds: (DDD)|(NUMERO)\n , every \n will have a (DDD)|(NUMERO) , then divide | and will have (DDD) and (NUMERO) of each set.

First break the string using explode :

$numeros = "13|123456789\n14|123456780\n";
$numeros = explode("\n", $numeros);

Now you will have an array for each (DDD)|(NUMERO) .

Then use can use for :

for($contador = 0; $contador < 3; $contador++){

    if(isset($numeros[$contador]) && !empty($numeros[$contador])){

     // Use outro explode para dividir entre DDD e NUMERO
     list($ddd, $numero) = explode("|", $numeros[$contador]);
     echo "Meu DDD é $ddd e meu celular é $numero!";
    }

}

You can also use foreach , to list ALL:

  

You can also limit using if($index === 3){break;} for example!

foreach($numeros as $index => $numero){

    if(!empty($numero)){
         list($ddd, $numero) = explode("|", $numero);
         echo "Meu DDD é $ddd e meu celular é $numero!";
    }

} 

You can test both by clicking here.

    
21.08.2016 / 21:38
1

Using preg_match_all to get the numbers only. You will have an array as below.

Array
(
    [0] => Array
        (
            [0] => 13
            [1] => 123456789
            [2] => 14
            [3] => 123456780
        )

    [1] => Array
        (
            [0] => 13
            [1] => 123456789
            [2] => 14
            [3] => 123456780
        )

)

Using array indexes, you can easily make the DDD and phone number join.

preg_match_all( '/(\d+)/' , '13|123456789\n14|123456780\n', $fone );

echo $fone[0][0] . '**' . $fone[0][1]; // 13**123456789
echo $fone[0][2] . '**' . $fone[0][3]; // 14**123456789
    
21.08.2016 / 22:25