Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Peixoto

[Resolvido] Notice: Undefined offset

Recommended Posts

Galera tenho um script aqui, que pega os tamanhos disponíveis dos produtos.

 

Funciona da seguinte forma: o cliente cadastra as informações do prod. e coloca os tamanhos disponivies do mesmo de X a Y, exemplo(tamanho 34 a 40).

 

só que no caso preciso colocar os tamanhos indisponiveis entre X e Y, exemplo(de 34 a 40, menos os numeros 36 e 38).

 

então estou fazendo dessa forma:

 /**
                                   * Faz um range ( entre ( de tamanho ) até ( a tamanho ) menos os números 'x,y,z...' ) 
                                   */
								function available( array $arr , $unavailable ) {
								  return array_diff( $arr , explode( ',' , $unavailable ) );
										}

                                  $numeros = ( available(range( $dados[ 'detamanho' ] , $dados[ 'atamanho' ] ), '32,36' ) );
                                  echo '<td class="input">';
                                         /**
                                          * Mostra os tamanhos disponíveis
                                          * o nome do input hidden já é o recuperado pelo GET para
                                          * adicionar ao carrinho
                                          */

                                         for( $i = 0; $i < count( $numeros ) ; ++ $i ){
                                                 printf( '<input type="radio" class="radio-btn" value="%d" name="numero" />%d' ,
                                                 $numeros[ $i ] , $numeros[ $i ] );

 

só que está acontecendo os seguintes erros:

 

Notice: Undefined offset: 2 in C:\EasyPHP-5.3.6.0\www\DE-PAULA\CALCADOS\produtos.php on line 148

 

Notice: Undefined offset: 2 in C:\EasyPHP-5.3.6.0\www\DE-PAULA\CALCADOS\produtos.php on line 148

 

a linha 148 é essa do código:

$numeros[ $i ] , $numeros[ $i ] );

 

Oque está acontecendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente os índices do array não existem.

 

Note que no seu for os números da variável $i serão sempre sequenciais, você tem certeza que no array eles estão organizados desta forma?

 

Faça um debug aí pra ver como o array está.

 

Antes do for coloque isso:

 

echo '<pre>' . print_r($numeros, true) . '</pre>' . PHP_EOL;

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 28/09/2011 at 19:04, Leozitho disse:

Simplesmente os índices do array não existem.

 

Note que no seu for os números da variável $i serão sempre sequenciais, você tem certeza que no array eles estão organizados desta forma?

 

Faça um debug aí pra ver como o array está.

 

Antes do for coloque isso:

 

echo '<pre>' . print_r($numeros, true) . '</pre>' . PHP_EOL;

 

Cara fiz o debug aqui e printou dessa forma

 

Array

(

[2] => 37

[3] => 38

)

 

o produto tem seu tamanho de 35 a 38 (-35 e 36)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho, cara mudei o script aqui e está printando corretamente, agora, como faço para printar os input radio, só os numeros disponíveis?

 

agora está assim:

 

/**
                                   * Faz um range ( entre ( de tamanho ) até ( a tamanho ) menos os números 'x,y,z...' ) 
                                   */
								function available( array $arr , $unavailable ) {
								  return array_diff( $arr , explode( ',' , $unavailable ) );
										}

                                  $numeros = range( $dados[ 'detamanho' ] , $dados[ 'atamanho' ] );
                                  echo '<td class="input">';
                                         /**
                                          * Mostra os tamanhos disponíveis
                                          * o nome do input hidden já é o recuperado pelo GET para
                                          * adicionar ao carrinho
                                          */

									   echo '<pre>';
										print_r( available( range( $dados[ 'detamanho' ] , $dados[ 'atamanho' ] ) , '36,37' ) );

                                         for( $i = 0; $i < count( $numeros ) ; ++ $i ){
                                                 printf( '<input type="radio" class="radio-btn" value="%d" name="numero" />%d' ,
                                                 $numeros[ $i ] , $numeros[ $i ] );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim o array está printando corretamente? Você quer dizer que agora ele está começando com o índice 0?

 

Se for isso, o for deveria já funcionar como o esperado. :S

 

Você pode deixar como estava e usar um foreach, assim:

 

foreach ($numeros as $numero) {
printf('<input type="radio" class="radio-btn" value="%d" name="numero" />%d', $numero, $numero);
}

 

Assim fica bem mais simples e menos confuso.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 28/09/2011 at 19:58, Guilherme Peixoto disse:

Então esta como eu queria, não?

Resolvido então?

 

No título do tópico e no primeiro post você colocou o erro "Undefined offset", este erro estava sendo causado porque você estava contando dentro do loop números a partir do zero para usar como índice do array, porém, o seu array não começava com este índice e nem se espera que ele tenha sempre os mesmos índices.

 

Por isso sugeri de você trocar o for pelo foreach, pois se sua intenção é apenas pegar os valores que estão no array $numeros, o foreach é a melhor opção.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 28/09/2011 at 19:49, Leozitho disse:

Assim fica bem mais simples e menos confuso.

Concordo ..

 

  Em 28/09/2011 at 19:58, Guilherme Peixoto disse:

Então esta como eu queria, não?

Não, a diferença está nos índices.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.