Ir para conteúdo

POWERED BY:

Arquivado

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

Delmir Oliveira

Mudar valor de array

Recommended Posts

Como mudar os valor do array pela porcentagem ex

Array
(
   [1] => Array   //total = 21+14+01 = 36
       (
           [0] => 21        //    21/36*100
           [1] => 14        //    14/36*100
           [2] => 01        //    01/36*100
       )

   [2] => Array   //O mesmo com esse 
       (
           [0] => 52
           [1] => 33
           [2] => 67
       )

   [3] => Array    //e com esse
       (
           [0] => 13
           [1] => 18
           [2] => 17
       )
)

 

 

*obs: array de array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha se isso resolve

<?php

$array = Array(1 => Array   //total = 21+14+01 = 36
					(
						0 => 21,        //    21/36*100
						1 => 14,       //    14/36*100
						2 => 01        //    01/36*100
					),

				2 => Array   //O mesmo com esse 
					(
						0 => 52,
						1 => 33,
						2 => 67
					),

				3 => Array    //e com esse
					(
						0 => 13,
						1 => 18,
						2 => 17
					)
			);
#var_dump($array);
foreach ($array as $chave => $valor) {
           $soma = array_sum($valor);
           foreach ($valor as $chave2 => $valor2) {
               echo ($valor2/$soma)*100;
           }
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou, sem loops visíveis:

 

array_walk(

   $data,

   function( $items, $offset ) use( &$data ) {

       $total = array_sum( $items );

       $data[ $offset ] = array_map(

           function( $item ) use( $total ) {
               return sprintf( '%.2f%%', ( ( $item * $total ) / 100 ) );
           },

           $items
       );
   }
);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai uma versão comentada?

 

// array_walk() faz alguma coisa em todo o array, igual à um foreach

array_walk(

   $data, // Array de entrada

   /**
    * Definição de uma função anônima
    *
    * É o mesmo que criar uma função "normal"
    * fora dessa função e informar, aqui, apenas
    * o nome
    *
    * $items receberá os valores da iteração,
    * assim como seu $valor do primeiro foreach
    *
    * $offset recebe o índice desse array
    * assim como seu $chave
    *
    * Apesar de anônima, é uma função, e por isso
    * tem escopos separados.
    *
    * O use() traz o escopo externo para o local
    *
    * Passo a variável por referência para que as modificações
    * feitas aqui dentro sejam mantidas fora daqui
    */
   function( $items, $offset ) use( &$data ) { 

       // Faço a soma, assim como você

       $total = array_sum( $items );

       /**
        * Aplico um outra função à todos os elementos do array
        *
        * array_map() é igual array_walk(), mas serve para
        * mapear os dados do array, alterando-os de alguma forma
        */
       $data[ $offset ] = array_map(

           /**
            * Outra função anônima
            *
            * $item receb o valor de cada índice do array
            *
            * O use() aqui faz a mesma coisa que acima, para que
            * esta função conheça a soma computada acima
            */
           function( $item ) use( $total ) {

               /**
                * Um texto formatado simples
                *
                * %.2f diz à função que nesse espaço virá
                * um número em ponto flutuante (decimal)
                *
                * E o .2 (ponto dois) restringe à apenas duas
                * casas decimais
                */
               return sprintf( '%.2f%%', ( ( $item * $total ) / 100 ) );
           },

           // Array de entrada, que é variável da função anônima anterior

           $items
       );
   }
);

deu mais trabalho comentar do que fracionar o código e responder cada trecho num parágrafo.

 

Mas ficou mais bonito :lol:

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.