Make a permutator in php

0

I found the following switch coded in Javascript:

<script>
    var letras = "abcdefghijklmnopqrstuvwxyz";
    letras = letras.split("");
    numLetras = letras.length;
    permuta = new Array;
    combina = 2; //nº de letras a combinar;
    serie = 1;

    for (i = 0; i < combina; i++)
        serie *= numLetras;
    for (i = 0; i < serie; i++)
        permuta[i] = '';
    subSerie = serie / numLetras;
    for (i = 0; i < combina; i++) {
        per = 1;
        let = 0;
        for (j = 0; j < serie; j++) {
            permuta[j] += letras[let];
            per += 1;
            if (per > subSerie) {
                per = 1;
                let += 1;
                if (let > numLetras - 1) let = 0;
            }
        }
        subSerie /= numLetras;
    }
    for (i = 0; i < serie; i++)
        document.write(permuta[i] + '<br/>');
</script>

What it does is show me all the possible combinations of a string with a given length in the variable combines , I would like to pass it to PHP php language and I'll take something like this:

<?php
    $letras = "abcdefghijklmnopqrstuvwxyz";
    $letras = explode($letras,"");
    $numLetras = strlen($letras);
    $permuta = array();
    $combina = 2; #nº de letras a combinar;
    $serie = 1;

    for ($i = 0; $i < $combina; $i++)
        $serie *= $numLetras;
    for ($i = 0; $i < $serie; $i++)
        $permuta[$i] = '';
    $subSerie = $serie / $numLetras;
    for ($i = 0; $i < $combina; $i++) {
        $per = 1;
        $let = 0;
        for ($j = 0; $j < $serie; $j++) {
            $permuta[$j] += $letras[$let];
            $per += 1;
            if ($per > $subSerie) {
                $per = 1;
                $let += 1;
                if ($let > $numLetras - 1) $let = 0;
            }
        }
        $subSerie /= $numLetras;
    }
    for ($i = 0; $i < $serie; $i++)
        echo $permuta[$i].'<br/>';

?>

But it gives me an error very consulted here: strlen () expects parameter 1 to be string, given array but I can not solve it. Thanks in advance.

    
asked by Jalkhov 27.12.2018 в 16:11
source

2 answers

2

The code you have is fine except for a few things.

1) you try to explode ($ letters) to get an array of characters, but $ letters is a string so you can access it in the same way, so you do not need to use explode. Example $ letter [0] returns 'a'

2) $ permuta [$ j] + = $ letters [$ let]; in php it is concatenated with "." $ permuta [$ j]. = $ letters [$ let];

$letras = "abcdefghijklmnopqrstuvwxyz";
$numLetras = strlen($letras);
$permuta = array();
$combina = 2; #nº de letras a combinar;
$serie = 1;

for ($i = 0; $i < $combina; $i++)
    $serie *= $numLetras;
for ($i = 0; $i < $serie; $i++)
    $permuta[$i] = '';
$subSerie = $serie / $numLetras;
for ($i = 0; $i < $combina; $i++) {
    $per = 1;
    $let = 0;
    for ($j = 0; $j < $serie; $j++) {
        $permuta[$j] .= $letras[$let];
        $per += 1;
        if ($per > $subSerie) {
            $per = 1;
            $let += 1;
            if ($let > $numLetras - 1) $let = 0;
        }
    }
    $subSerie /= $numLetras;
}
for ($i = 0; $i < $serie; $i++)
    echo $permuta[$i].'<br/>';

I hope it serves you.

    
answered by 27.12.2018 / 17:04
source
0

The error tells you strlen() expects parameter 1 to be string, array given , a strlen() you are passing as the first parameter a array when you expect a string .

// en esta línea convertís el string en array 
//reemplazas el explode por str_split
$letras = str_split($letras);
//deberías usar un count()
$numLetras = count($letras);
    
answered by 27.12.2018 в 16:19