Ir para conteúdo

POWERED BY:

Arquivado

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

erison

[Resolvido] array vazia

Recommended Posts

pessoal to com um problema de array.

 

assim quero que mostre em um print_r();

 

apenas os array vazios.

 

ex:


$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = '';

print_r($Array);

 

eu quero que mostra no print apenas os 3 primeiros array.

 

não quero da forach dentro de outro.

.

 

tipo array_filter();

 

so que ele traz os campos não NULL;

 

e eu quero os campos NULL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente:

 

<?php

function EmptyValues() {

	return null;

}

$Array = array( "Brasil", "USA", "" );

print_r(array_filter( $Array, "EmptyValues" ));

Compartilhar este post


Link para o post
Compartilhar em outros sites
$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = 'cheio';
$Array['123']['456']['789'][] = '';

array_unique($Array);
print_r($Array);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente:

 

<?php

function EmptyValues() {

	return null;

}

$Array = array( "Brasil", "USA", "" );

print_r(array_filter( $Array, "EmptyValues" ));

 

Error ! array_filter espera BOOLEAN, você tá jogando null, a solução seria:

<?php

      $a = array ( ) ;
      $a [ 'x' ] [ 'y' ] [ 0 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 1 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 2 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 3 ] = '' ;

      $r = array_map ( function ( $c ) {
             return array_map ( 'array_filter' , $c ) ;
      } , $a ) ;


      print_r ( $r ) ;

 

Agora só você diferenciar tudo que está em $a que não está em $r

Compartilhar este post


Link para o post
Compartilhar em outros sites

Error ! array_filter espera BOOLEAN, você tá jogando null, a solução seria:

<?php

      $a = array ( ) ;
      $a [ 'x' ] [ 'y' ] [ 0 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 1 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 2 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 3 ] = '' ;

      $r = array_map ( function ( $c ) {
             return array_map ( 'array_filter' , $c ) ;
      } , $a ) ;


      print_r ( $r ) ;

 

Agora só você diferenciar tudo que está em $a que não está em $r

 

 

 

cara isso ai deu certo no codigo mas pode me explicar o que voçê fez ai.

 

comenta nas linhas para eu saber oq cada comando faz

Compartilhar este post


Link para o post
Compartilhar em outros sites

O array_map aplica o callback para cada elemento, já que o array é multi dimensional, eu torno a usar o map de novo até chegar nos valores para rodar o filtro lá

:seta: http://br.php.net/manual/en/function.array-filter.php

 

Resolvido então ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O array_map aplica o callback para cada elemento, já que o array é multi dimensional, eu torno a usar o map de novo até chegar nos valores para rodar o filtro lá

:seta: http://br.php.net/manual/en/function.array-filter.php

 

Resolvido então ?

 

mas em qual parte do codigo você fala que so pode mostra os array cheio

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas em qual parte do codigo você fala que so pode mostra os array cheio

 

???

 

Você leu o que eu falei e viu o link que eu mandei ? se sabemos que o array_filter elimina tudo que é vazio, logicamente, só irá retornar os arrays que tem algum valor definido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas não conseguie dar um array_diff();

 

por quero mostra apenas as array vazia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daí você edita o código e muda a lógica

<?php

      $a = array ( ) ;
      $a [ 'x' ] [ 'y' ] [ 0 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 1 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 2 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 3 ] = '' ;

      $r = array_map ( function ( $c ) {
             return array_map ( function ( $x ) { 
                    return array_filter ( $x , function ( $v ) { 
                           return empty ( $v ) ;
                    } ) ;
             } , $c ) ;
      } , $a ) ;


      print_r ( $r ) ;

 

Vai voltar


Array
(
   [x] => Array
       (
           [y] => Array
               (
                   [3] => 
               )

       )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites


$a = array ( ) ;
      $a [ 'x' ] [ 'y' ] [ 0 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 1 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 2 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 3 ] = '' ;

      $a [ 'z' ] = '' ;


$r = array_map ( function ( $c ) {
             return array_map ( function ( $x ) { 
                    return array_filter ( $x , function ( $v ) { 
                           return empty ( $v ) ;
                    } ) ;
             } , $c ) ;
      } , $a ) ;

 

 

me ajuda ai em outra coisa cara.

eu so quero que execute esse codigo apenas

 

$ArrayX = $a['x'];

 

 

 


$a = array ( ) ;
      $a [ 'x' ] [ 'y' ] [ 0 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 1 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 2 ] = 'algo' ;
      $a [ 'x' ] [ 'y' ] [ 3 ] = '' ;

      $a [ 'z' ] = '' ;

$ArrayX = $a [ 'x' ];


$r = array_map ( function ( $c ) {
             return array_map ( function ( $x ) { 
                    return array_filter ( $x , function ( $v ) { 
                           return empty ( $v ) ;
                    } ) ;
             } , $c ) ;
      } , $ArrayX ) ;

 

como fasso isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

$r = array_map ( function ( $c ) {
        return array_filter ( $c , function ( $v ) {
               return empty ( $v ) ;
        } ) ;
} , $ArrayX ) ;

 

Amigo, recomendo que estude o uso dessas funções ..

 

e poque nesta array vai ter multimensional e normal.

 

$a = array ( ) ;
      $a [ 'x' ] [ 'y1' ] ['Alert_y1'] = 'algo' ;
      $a [ 'x' ] [ 'y2' ] ['Alert_y2'] = 'algo' ;
      $a [ 'x' ] [ 'y3' ] ['Alert_y3'] = 'algo' ;
      $a [ 'x' ] [ 'y4' ] ['Alert_y4'] = '' ;


$ArrayX = $a [ 'x' ];


$r = array_map ( function ( $c ) {
             return array_map ( function ( $x ) { 
                    return array_filter ( $x , function ( $v ) { 
                           return empty ( $v ) ;
                    } ) ;
             } , $c ) ;
      } , $ArrayX ) ;

 

 

ele ta retornando

 


Array
(
   [y1] => Array
       (
       )

   [y2] => Array
       (
       )
   [y3] => Array
       (
       )


   [y4] => Array
       (
           [Alert_y4] => 
       )

)



 

como fasso para retornar apenas o

 

 

[y4] => Array
       (
           [Alert_y4] => 
       )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na boa, o código que você colocou tá errado, e vou falar de novo ... vai estudar o uso das funções - eu não vou ficar aqui postando N alternativas para resolver seu problema, eu já te dei uma base, você voltou com outro problema, te dei outra resposta ... sua solução é óbvia, mas eu não vou te dar, consiga-a você mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o forum e feito para ajudar.

 

e você postou o codigo que resolve a metade do problema. no topico tem array vazia.

eu quero que ele me traga apenas a array vazia.

 

tenho a array.


$a['x']['y1']['alert_y1'] = 'algo';
$a['x']['y2']['alert_y2'] = 'algo';
$a['x']['y3']['alert_y3'] = 'algo';
$a['x']['y4']['alert_y4'] = '';

//eu quero que ele so me retorne a utima e ja tentei isso tudo ai e não retorna a utima.

 

ja teve topicos aqui, que eu ja pequisei em livros para poder ajudar o cara.

e nem porisso me incomodei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o forum e feito para ajudar.

Não nesse sentido.

 

e você postou o codigo que resolve a metade do problema. no topico tem array vazia.

eu quero que ele me traga apenas a array vazia.

Não, resolve o problema apresentado inicialmente, não havia nenhum outro detalhe.

 

ja teve topicos aqui, que eu ja pequisei em livros para poder ajudar o cara.

e nem porisso me incomodei.

Então, "eu" ou seja "você", mas somos diferentes, e eu não estou incomodado, é que eu não gosto de ficar postando códigos e a pessoa retornando com mais e mais situações, sem ao menos tentar ... (resolver o próprio problema).

 

Como eu disse, eu já lhe dei a base, agora o resto é contigo.

Mostre como você tentou.

Compartilhar este post


Link para o post
Compartilhar em outros sites
o forum e feito para ajudar.

Fórum não é help desk, ninguém aqui recebe nada para ajudar ninguém, nem nós moderadores.

 

Se você está ignorando o conselho que lhe foi dado, o problema é seu, não somos obrigados a tolerar esse tipo de atitude infantil.

 

Ajudar??? sim, ajudamos no que podemos, agora não adianta querer fazer um foguete se você não sabe física básica...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo tempo gasto,

vó tentar resolver o resto

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.