wBB 0 Denunciar post Postado Janeiro 15, 2008 Pessoal, Gostaria de uma ajudinha numa operação com arrays. Considerando os seguintes arrays: Array1: $aa, se executar uma VAR_DUMP nele mostrará: array(5) { [0]=> int(-1) [1]=> int(-2) [2]=> int(1) [3]=> int(-3) [4]=> int(-4) } Array2: $bb, se executar uma VAR_DUMP nele mostrará: array(5) { [0]=> string(1) "n" [1]=> string(1) "n" [2]=> string(1) "p" [3]=> string(1) "n" [4]=> string(1) "n" } Gostaria de unir os dois, de forma que o resultado seja: Array (5) { ["n"]=>-1 ["n"]=>-2 ["p"]=>1 ["n"]=>-3 ["n"]=>-4 }Tem como? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 15, 2008 Veja se está função lhe é útil: http://br2.php.net/array_merge Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Beraldo, não sei se você chegou a testar esta função, mas o resultado dela se aplicada aos array que indiquei será: $cc = array_merge($aa, $bb); var_dump($cc) = array(10) { [0]=> int(-1) [1]=> int(-2) [2]=> int(1) [3]=> int(-3) [4]=> int(-4) [5]=> string(1) "n" [6]=> string(1) "n" [7]=> string(1) "p" [8]=> string(1) "n" [9]=> string(1) "n" } $cc = array_merge($bb, $aa); var_dump($cc) = array(10) { [0]=> string(1) "n" [1]=> string(1) "n" [2]=> string(1) "p" [3]=> string(1) "n" [4]=> string(1) "n" [5]=> int(-1) [6]=> int(-2) [7]=> int(1) [8]=> int(-3) [9]=> int(-4) }Será que estou fazendo algo errado? Existe outra maneira de aplicar o array_merge?Está criando um array de 10 posiçoes, ou seja, está concatenando os arrays em lugar de transformar um em índice do outro. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 15, 2008 ah, você quer que os valores do segundo array tornem-se osíndices do primeiro array. É isso? Crie o novo array usando um loop, utilizando os valores retornados por array_keys() e array_values(). http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Desculpe, não entendi. Já usei essas duas funções também (e várias outras do manual...), mas não consegui obter o resultado abaixo. Você poderia dar um exemplo? Resultado esperado: Array (5) { ["n"]=>-1 ["n"]=>-2 ["p"]=>1 ["n"]=>-3 ["n"]=>-4 } Compartilhar este post Link para o post Compartilhar em outros sites
Mario Helme 0 Denunciar post Postado Janeiro 15, 2008 Mas dessa forma, seu array final vai ter chaves iguais: Olha só: <?php $v = array(-1, -2, 1, -3, -4); $k = array("n", "n", "p", "n", "n"); $c = array_combine($k, $v); var_dump($c); ?> Isso vai gerar: array(2) { ["n"]=>int(-4) ["p"]=>int(1) } Ou seja, em uma mesma chave (com mesmo nome) ele coloca somente o último valor. Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Beraldo, agradeço sua atenção, mas não é isso que preciso. A resposta do array_combine que você sugeriu, dá como retorno um array de 2 posições. E as outras? Meu array $aa tem 5 posições. O mesmo para o array $bb. O resultado que preciso é um array também de 5 posições, conforme o exemplo: Array (5) { ["n"]=>-1 ["n"]=>-2 ["p"]=>1 ["n"]=>-3 ["n"]=>-4 }mesmo assim obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Mario Helme 0 Denunciar post Postado Janeiro 15, 2008 Mas então: posso estar errado, mas acho que você não consegue o que você quer, porque voce está repetindo as chaves da sua Array, elas tem o mesmo nome, e isso é impossível. Nesse seu caso, você não consegue pegar o primeiro ítem da sua Array, porque, como você fez uma associação chave=>valor, não existe mais Array[0], Array[1],... e sim Array['n'] e Array['p'] (nesse caso). E se você faz um Array['n'] ele pega o último valor associado à essa chave, que nesse caso é -4. O que você pode fazer, é criar uma array bidimensional, mas não sei se te ajuda. Algo como: Array (5) { Array(1){ ["n"]=>-1 } Array(1){ ["n"]=>-2 } Array(1){ ["p"]=>1 } Array(1){ ["n"]=>-3 } Array(1){ ["n"]=>-4 } } Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Fala Mario. Entendi. E será que tem como gerar o array que você sugeriu a partir dos dois arrays que tenho? Compartilhar este post Link para o post Compartilhar em outros sites
Mario Helme 0 Denunciar post Postado Janeiro 15, 2008 Pra você gerar esse tipo de array que falei, um dos modos pode ser esse: <?php $aa = array(-1, -2, 1, -3, -4); $bb = array("n", "n", "p", "n", "n"); $cc = array(); foreach(array_keys($aa) as $k) { $cc[$k] = array($bb[$k]=>$aa[$k]); } var_dump($cc); ?> Isso vai gerar: array(5) { [0]=> array(1) { ["n"]=> int(-1) } [1]=> array(1) { ["n"]=> int(-2) } [2]=> array(1) { ["p"]=> int(1) } [3]=> array(1) { ["n"]=> int(-3) } [4]=> array(1) { ["n"]=> int(-4) } } Mas agora, você vai precisar adaptar seu script para que ele ache os valores dentro desse tipo de array. <?php echo $cc[0]["n"]; # -1 echo $cc[1]["n"]; # -2 echo $cc[2]["n"]; # vazio, porque nesse array não há a chave "n" echo $cc[2]["p"]; # 1 ?> Não sei se vai te ajudar. Qualquer coisa, estamos ai. Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Olá Mario. Isso não antende ao que eu preciso fazer, porém é bom, pois vai me servir para outra coisa. Vou estudar como resolver o problema de outra maneira. Valeu pela dica. Compartilhar este post Link para o post Compartilhar em outros sites
Mario Helme 0 Denunciar post Postado Janeiro 15, 2008 Imaginei mesmo que isso não serviria muito para o que você precisa. Essa associação precisa ser chave=>valor? E se você criar um Array com esses valores como sendo uma coisa só? Tipo: Array ("n|-1", "n|-2", "p|1", "n|-3", "n|-4");Desse modo, a associação de cada ítem seria pelo separador "|".E assim, você teria os valores de cada um usando um explode("|") em cada valor do Array. Apenas uma idéia BEM por cima do que poderia ser. Compartilhar este post Link para o post Compartilhar em outros sites
wBB 0 Denunciar post Postado Janeiro 15, 2008 Com alguma adaptação acho que até funcionaria em minha aplicação sim. Isso que eu estava precisando era para usar junto com a lib Smarty. Me facilitaria a vida um pouco. Porém, depois do você comentou sobre o problema das chaves serem iguais, no post anterior, me toquei que teria que dar outra solução para o caso. Sem problema, já resolvi. Só que não ficou tão elegante quanto eu gostaria. obrigado mais uma vez. Compartilhar este post Link para o post Compartilhar em outros sites