Evitando o loop for no PHP

Em: 19/12/2007 Tags: Referencie do seu blog (Trackback)

Após conhecer outras linguagens me dei conta de que o PHP não tinha (ou eu não conhecia) uma função ou construção que me permitisse criar um array a partir de uma seqüência. Ruby, por exemplo, nos dá a classe Range. Mas não é que o PHP oferece uma solução similar? Uma salva de palmas para a função range(), por favor.

Exemplo: queremos um array com todos os números entre 5 e 15.

$arr = range(5,15);

Você ainda pode utilizar ranges de caracteres. Por exemplo, de ‘c’ a ‘r’.

$chars = range('c', 'r');

Mas o que me chamou atenção foi descobrir, após 4 anos de programação PHP, que a construção foreach pode ser combinada com range(). Isso torna um loop feio e arcaica como este…

for ($i = 1; $i <= 10; $i++) { ... }

… em um loop foreach muito mais agradável:

foreach (range(1, 10) as $n) { ... }

É verdade, a verbosidade continua grande. Seria interessante se tivéssemos no PHP algo como o times do Ruby, ou mesmo each. Mas esqueça. Essas construções só funcionam bem no Ruby (e no JavaScript, com Prototype), pois essas linguagens tratam funções como valores de primeira classe. O PHP deve continuar deixando as funções para escanteio em sua versão 6, então vamos ter que continuar com nosso código ultra verboso.

Artigos relacionados:

4 respostas para “Evitando o loop for no PHP”

  1. Daniel Neis disse:

    Opa! range() , legal… essa dica é quente… depois que eu descobri o list(), também, minha vida mudou hehehehe

  2. Caio disse:

    Sim, a list() também é uma baita… e o engraçado é que ela não é uma função, assim como array() também não é.

  3. augustowebd disse:

    olá,

    gostaria de saber o que vc quer dizer com: “valores de primeira classe”, valeu.

  4. Caio Moritz Ronchi disse:

    Quero dizer que esses valores (no caso funções) não podem ser atribuídos a variáveis, nem passados como parâmetro para outra função, nem retornados como resultado da execução de uma função. Todas essas características, por exemplo, estão presentes em Ruby e JavaScript. Se um dia você vir isto sendo válido em PHP:

    $sum = function($a, $b) {
        return $a + $b;
    }
    

    Então, nesse dia, funções serão valores de primeira classe no PHP ;-)

Escreva um comentário (utilize o formato Markdown)