Jump to content


Photo

Transformar array em outro array


  • Faça o login para participar
2 replies to this topic

#1 wellington09

wellington09

    12 Horas

  • Usuários
  • 218 posts
  • Sexo:Masculino

Posted 17/11/2015, 10:44

Alguém poderia me dar uma força em uma lógica ?

Estou com dificuldade de transformar o seguinte array

<?php
Array
(
[nome] => Array
(
[0] => João
[1] => Maria
[2] => Pedrinho
[3] => Zezinho
)

[texto] => Array
(
[0] => A
[1] => B
[2] => C
[3] => D
)

)
?>

Neste array aqui

<?php
Array
(
[nome] => João
[texto] => A
)

Array
(
[nome] => Maria
[texto] => B
)

Array
(
[nome] => Pedrinho
[texto] => C
)

Array
(
[nome] => Zezinho
[texto] => D
)
?>

Abaixo segue minha tentativa 

$contador = count($array);
$cont = 0;
$novo = array();

    foreach($array as $k1=>$v):
        $cont++;
        foreach($array[$k1] as $k2=>$v2):
            if($cont <= $contador):
                $novo[$k1] = $v2;
            endif;
        endforeach;
    endforeach;

print_r($novo);

RESULTADO FINAL

Array
(
[nome] => Zezinho
[texto] => D
)

Edição feita por: wellington09, 17/11/2015, 10:45.


#2 ShZlot

ShZlot

    12 Horas

  • Moderadores
  • 121 posts
  • Sexo:Masculino
  • Localidade:Bahia

Posted 17/11/2015, 11:40

<?php
$matriz = array(
	'nome' => array('João', 'Maria', 'Pedrinho', 'Zezinho'),
	'texto' => array('A', 'B', 'C', 'D')
);
$nova_matriz = array();
$cont1 = count($matriz['nome']);
$cont2 = count($matriz['texto']);
if($cont1 == $cont2){
	for($i=0; $i<$cont1; $i++){
		$key = $matriz['nome'][$i];
		$value = $matriz['texto'][$i];
		$nova_matriz[$key] = $value;
	}
}

print_r($nova_matriz);
?>

 

Saída:

Array
(
    [João] => A
    [Maria] => B
    [Pedrinho] => C
    [Zezinho] => D
)

Trabalho desenvolvendo no melhor e mais completo CMS do tipo SaaS. Conheça você também e crie um site grátis no uCoz.


#3 wellington09

wellington09

    12 Horas

  • Usuários
  • 218 posts
  • Sexo:Masculino

Posted 20/11/2015, 11:02

ShZlot, fiquei batendo cabeça aqui e consegui resolver o meu problema com o seguinte código abaixo.

<?php
$campo_1 = 'nome';
$campo_2 = 'texto';
$contador = 0;
foreach($arrayDados as $k=>$v):// Array principal
    $qtd = count($v);
    foreach($arrayDados[$k] as $k2=>$v2):// Arrays dentro do array principal
        if($contador < $qtd):
            $array_chave[$campo_1] = $arrayDados[$campo_1][$contador]; // crio um novo array
            $array_chave[$campo_2] = $arrayDados[$campo_2][$contador]; // crio um novo array
           print_r($array_chave);// monta o array do jeito que eu quero
        endif;
       $contador++;
   endforeach;
endforeach;
?>

Fiz um laço na tag fieldset, apenas para simular um exemplo e brincar com o codigo: 

<form action="" method="post" target="_blank">
    <?php for($i = 0; $i < 3 ; $i++):?>
    <fieldset>
       <legend>Teste <?php echo $i;?></legend>
       <p>
         <label>Nome</label>
         <input name="tabelas[nome][]" type="text" />
       </p>
       <p>
         <label>Texto</label>
         <input name="tabelas[texto][]" type="text" />
       </p>
    </fieldset>
    <?php endfor;?>
    <input name="enviar" type="submit" value="enviar" />
</form>

Apesar do código estar funcionando e gerando o array do jeito que eu queria, eu ainda não fiquei satisfeito com o código que criei, pois caso eu tenha um novo campo dentro da tag fieldset ex:

      <p>
        <label>Link</label>
        <input name="tabelas[link][]" type="url" />
      </p>

Terei que acrescentar o seguinte código no PHP

$campo_3 = 'link';
$array_chave[$campo_3] = $arrayDados[$campo_3][$contador]; // crio um novo array

Se alguém puder me ajudar na logica acima, deixando ela mais dinâmica sem a necessidade de ficar acrescentando variáveis como campo_1campo_2campo_3campo_4, etc., eu fico grato.


Edição feita por: wellington09, 20/11/2015, 11:08.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq