erison 63 Denunciar post Postado Novembro 20, 2012 pessoal tenho a seguinte array Array ( [0] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 3368 [1] => 3368 ) [1] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 2301 [1] => 2301 ) [2] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 3183 [1] => 3183 ) [3] => Array ( [NMfunci] => LEONARDO FARIAS CRUZ [0] => LEONARDO FARIAS CRUZ [iDos] => 3401 [1] => 3401 ) ) e queria fazer a seguinte contagem FRANCISCO ERISON SILVA DO NASCIMENTO = 3 LEONARDO FARIAS CRUZ = 1 tem como? Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 tem sim... $array = array( 0 => array( 0 => 'fulano', 'id' => '1615', 2 => 'ciclano' ) ) $contArrayUm = count($array[0]); // só pra contar os nós do array 0 $arrayUm = $array[0]; // pegar os dados do primeiro array 0 $arrayDois_1 = $arrayUm[0]; // pego os dados do primeiro array $arrayDois_2 = $arrayUm['id']; $arrayDois_3 = $arrayUm[2]; Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Novembro 20, 2012 tem sim... $array = array( 0 => array( 0 => 'fulano', 'id' => '1615', 2 => 'ciclano' ) ) $contArrayUm = count($array[0]); // só pra contar os nós do array 0 $arrayUm = $array[0]; // pegar os dados do primeiro array 0 $arrayDois_1 = $arrayUm[0]; // pego os dados do primeiro array $arrayDois_2 = $arrayUm['id']; $arrayDois_3 = $arrayUm[2]; rs rapaz isso deu muito certo não echo que o retorno certo era para ser como no array_count_values que retorna [FRANCISCO ERISON SILVA DO NASCIMENTO] => 3 [LEONARDO FARIAS CRUZ] => 1 mas so dar na mesma array, não sei como fazer em multidimensional Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 amigo revise seu script ... pois utilizo uma aplicação exatamente dessa forma e funciona perfeitamente... :huh: Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Novembro 20, 2012 amigo revise seu script ... pois utilizo uma aplicação exatamente dessa forma e funciona perfeitamente... :huh:/> mas a minha estrutura da array e diferente da sua, como vai da certo Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 cara... acabei de fazer um teste aqui exatamente como postei acima e funcionou perfeitamente... :grin: poste seu código aí! Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Novembro 20, 2012 cara... acabei de fazer um teste aqui exatamente como postei acima e funcionou perfeitamente... :grin:/> poste seu código aí! mas isso ai você vai colocando na mão essas chaves, eu quero isso automatico Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 tente assim: $array[] = array( 0 => $nome, 'id' => $id, 2 => $string ); dessa forma os primeiros nós do array será criado automaticamente a partir do 0 Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Novembro 20, 2012 conseguie fazer desta forma, $Qry = Array ( [0] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 3368 [1] => 3368 ) [1] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 2301 [1] => 2301 ) [2] => Array ( [NMfunci] => FRANCISCO ERISON SILVA DO NASCIMENTO [0] => FRANCISCO ERISON SILVA DO NASCIMENTO [iDos] => 3183 [1] => 3183 ) [3] => Array ( [NMfunci] => LEONARDO FARIAS CRUZ [0] => LEONARDO FARIAS CRUZ [iDos] => 3401 [1] => 3401 ) ); foreach(array_map(function($a){return array_unique($a);},$Qry) as $Mst): $MstFim[] = $Mst['NMfunci']; endforeach; print_r(array_count_values($MstFim)); mas acho que ficou meio q uma gambiarra, pesso que os administradores não coloque como resolvido. pq acho que deve ter uma forma melhor, sem eu prescisar dar um foreach; Compartilhar este post Link para o post Compartilhar em outros sites
Limma 1 Denunciar post Postado Novembro 20, 2012 Opa, Acredito que uma outra forma de se fazer, seria assim: Lembre-se que para esse tipo de verificação, você precisa efetuar uma busca linear em todo o array. Não há funções mágicas para te retornar algo pronto da forma que quer. <?php function hasDuplicate($array, $key) { $unique = array(); $total = count($array); for($i = 0; $i < $total; $i++) { for($j = 0; $j < $total; $j++) { if(isset($array[$i][$key])) { if($array[$i][$key] == $array[$j][$key]) { $unique[] = $array[$i][$key]; } } } } return array_count_values($unique); } print_r( hasDuplicate($array, 'NMfunci') ); ?> Abs! Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 o amigo Limma citou uma forma de fazer com for muito boa colocação, como eu já gosto de utilizar mais o foreach quando vo trabalhar com array então eu faria dessa forma: <?php $Qry = array( 0 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3368, 1 => 3368 ), 1 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 2301, 1 => 2301 ), 2 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => '3183', 1 => 3183 ), 3 => array ( 'NMfunci' => 'LEONARDO FARIAS CRUZ', 0 => 'LEONARDO FARIAS CRUZ', 'IDos' => 3401, 1 => 3401 ) ); $ctCh=0; foreach($Qry as $chave => $valor){ foreach($valor as $ch => $vl){ if($ch == 'NMfunci'){ $NMfunci[$ctCh] = $vl; } } $ctCh++; } print_r($NMfunci); ?> acredito que seria isso que assim resolveria o problema... :grin: Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Novembro 20, 2012 a questão não e com um for ou um while ou um foreach; eu não quero listar toda a array, pq se for uma array muito grande ela vai demorar mais para dar o resultado. mas em fim do modo que postei ai em cima deu certo, so queria tirar esse meu foreach. mas enquantanto não acha solução deixa como esta vlw ai galera Compartilhar este post Link para o post Compartilhar em outros sites
Limma 1 Denunciar post Postado Novembro 20, 2012 Não dá pra fugir do for/foreach cara. Uma solução mais elegante de se fazer seria utilizando SPL (Standart PHP Library) do PHP. Um exemplo abaixo: Com RecursiveArrayIterator e RecursiveIteratorIterator você "achata/flatten" o array e percorre os nós com AppendInterator. <?php $array = array(); $array[] = array('NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3368, '1' => 3368); $array[] = array('NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 2301, '1' => 2301); $array[] = array('NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3183, '1' => 3183); $array[] = array('NMfunci' => 'LEONARDO FARIAS CRUZ', '0' => 'LEONARDO FARIAS CRUZ', 'IDos' => 3401, '1' => 3401); $ai = new AppendIterator; $ai->append(new RecursiveIteratorIterator(new RecursiveArrayIterator($array))); $counters = array(); foreach($ai as $key=>$value) { if ( 'NMfunci'===$key ) { @$counters[$value] += 1; } } print_r($counters); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Txai 1 Denunciar post Postado Novembro 20, 2012 Bom, simples e prático para uso, criei uma função e vou postar um teste que fiz: A função: // $arrayDeArrays = ao array multi dimensional que engloba todos os outros arrays com a chave que você quer contar // $chave = a chave que você quer contar, que no seu caso é a 'NMfunci' function countValueMultiArray($arrayDeArrays, $chave) { $novoArray = array(); foreach($arrayDeArrays as $arrays) { if(array_key_exists($arrays[$chave], $novoArray)) { $novoArray[$arrays[$chave]] = $novoArray[$arrays[$chave]] + 1; } else { $novoArray[$arrays[$chave]] = 1; } } return $novoArray; } Exemplo de uso: // Declaro o array que você postou primeiramente $arrayTeste = array ( '0' => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3368, '1' => 3368 ), '1' => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 2301, '1' => 2301 ), '2' => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', '0' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3183, '1' => 3183 ), '3' => array ( 'NMfunci' => 'LEONARDO FARIAS CRUZ', '0' => 'LEONARDO FARIAS CRUZ', 'IDos' => 3401, '1' => 3401 ) ); // chamo a minha função que mostrei anteriormente $arrayFormatado = countValueMultiArray($arrayTeste,'NMfunci'); // faço um var_dump apenas para mostrar na tela e confirmar que a função fez o que tinha que fazer var_dump($arrayFormatado); a saída foi: array (size=2) 'FRANCISCO ERISON SILVA DO NASCIMENTO' => int 3 'LEONARDO FARIAS CRUZ' => int 1 não fiz o teste com grandes arrays, pois estou sem tempo. Compartilhar este post Link para o post Compartilhar em outros sites
Dárcio Gomes 10 Denunciar post Postado Novembro 20, 2012 a questão não e com um for ou um while ou um foreach; eu não quero listar toda a array, pq se for uma array muito grande ela vai demorar mais para dar o resultado. mas em fim do modo que postei ai em cima deu certo, so queria tirar esse meu foreach. mas enquantanto não acha solução deixa como esta vlw ai galera o amigo txai criou uma função PHP ... muito bom... mas mesmo assim tem um foreach() dentro da função... acredito que não exista possibilidade de fazer essa funcionalidade sem um for/foreach ou while, e se existe desconheço! boa sorte na sua busca!.. B) Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Novembro 20, 2012 Uma das várias formas de se resolver este problema é a seguinte: Array $array = array ( 0 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3368, 1 => 3368 ), 1 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 2301, 1 => 2301 ), 2 => array ( 'NMfunci' => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 0 => 'FRANCISCO ERISON SILVA DO NASCIMENTO', 'IDos' => 3183, 1 => 3183 ), 3 => array ( 'NMfunci' => 'LEONARDO FARIAS CRUZ', 0 => 'LEONARDO FARIAS CRUZ', 'IDos' => 3401, 1 => 3401 ) ); Script function my_array_count_values( array $array ) { $result = array( ); $array = array_chunk( $array, 1 ); array_walk( $array, function( $array ) use( &$result ) { $result = array_merge( $result, array_values( array_unique( array_shift( $array ) ) ) ); } ); return array_count_values( $result ); } Teste var_dump( my_array_count_values( $array ) ); Resultado array 'FRANCISCO ERISON SILVA DO NASCIMENTO' => int 3 3368 => int 1 2301 => int 1 3183 => int 1 'LEONARDO FARIAS CRUZ' => int 1 3401 => int 1 :closedeyes: Compartilhar este post Link para o post Compartilhar em outros sites