2
respostas

Foreach

Boa noite,

Estou executando esse foreach e o resultado quando eu imprimo a variável $cpf ela retorna números diferentes. Copiei o código da aula e tbm deu números do cpf's diferentes. Alguém pode me ajudar a solucionar? RESULTADOS quando é imprimida a $cpf: -539222978 e -539222977

<?php
    $contasCorrentes = [
        12345678910 => [
            'titular' => 'Gaby',  
            'saldo' => 2000,
            'idade' => 27
        ], 
        12345678911 => [
            'titular' => 'Michel',
            'saldo' => 3000,
            'idade' => 32
        ],
    ];

    foreach ($contasCorrentes as $cpf => $conta) {
            echo $cpf . PHP_EOL;


2 respostas

Boa noite,

Existe algumas limitações quando o sistema é de 32bits que acredito que seja o seu caso (xampp, wamp ou afins) por exemplo:

Se pegamos um array e colocamos o índice dele como 2147483647 - Este é o valor máximo do inteiro em um sistema de 32bits

$arrTeste[2147483647] = 'foo';
var_dump($arrTeste);

O próximo índice gerado será o -2147483648 devido ao estouro de inteiro, por isso que o seu resultado está sendo esses números negativos se fazer o comparativo verá que..

12345678910 - Seu numero 2147483647 - numero max

uma possível solução para essa situação é colocar o índice como uma string

<?php
    $contasCorrentes = [
        '12345678910' => [
            'titular' => 'Gaby',  
            'saldo' => 2000,
            'idade' => 27
        ], 
        '12345678911' => [
            'titular' => 'Michel',
            'saldo' => 3000,
            'idade' => 32
        ],
    ];

    foreach ($contasCorrentes as $cpf => $conta) {
            echo $cpf . PHP_EOL;
    }

porém isso varia de contextos, então veja se pode ser usado dessa forma de fato ou alterne para uma estrutura de 64bts que também resolverá até o limite máximo do 64bts

Oi Paulo, tudo bom?

Eu instalei o a última versão do PHP x86, que eu vi que era pra sistema 64bits. Eu dei uma olhada na documentação do PHP e lá tem falando sobre uma alteração para tratamento de valor octais: "Anteriormente, os literais octais que continham números inválidos eram silenciosamente truncados ( 0128era considerado como 012). Agora, um literal octal inválido causará um erro de análise."

Antes, quando eu colocava o CPF, como um array associativo inteiro, no CMD vinha essa mensagem de erro - Parse error: Invalid numeric literal.

Num fórum fora do Alura, teve uma resposta interessante sobre esse erro:"Isso ocorre porque todos os números que começam com 0 são considerados valores octais, que têm um limite superior de 8 dígitos por posição (0-7). Conforme declarado no manual do PHP , em vez de omitir silenciosamente os dígitos inválidos, eles agora (7.x) produzem o aviso acima."

Eu acabei de testar e ora funciona, ora não. Eu estou confusa em relação a isso, porque eu não consegui executar meu código como o professor Vinícius fez na aula de Foreach.

Agora sobre sua resposta: Eu coloquei entre aspas simples, para transformar em uma str e funcionou.

Será que tem algum outro detalhe que esteja fugindo e por isso não consigo executar esse array associativo com um índice inteiro, com o tamanho de um cpf, por exemplo?