Forum Pplware
[PHP] Arrays dentro de Arrays - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: [PHP] Arrays dentro de Arrays (/showthread.php?tid=19023)



[PHP] Arrays dentro de Arrays - dininis - 23-04-2014 19:48

Boas, gostaria de saber se é possível obter um determinado valor que se encontra dentro de um array ($array[0] = $valor) que, por sua vez se encontra dentro de um array multi-dimensional. Isto, sem ter que colocar ciclos dentro de ciclos, o que limita a quantidade de informação que posso passar, no meu caso.

Exemplo:
Código:
<?php
$valor = "teste";
$array = array(
    array(
        array($valor)
    )
);
?>

Para obter o $valor, pelo que sei, seriam 3 ciclos (foreach, é o mais fácil para mim, por exemplo) uns dentros dos outros para percorrer todo o array multi-dimensional. Porém, para isso, temos ou que saber a quantidade de dimensões que o array terá, ou teremos que o prever, por exemplo: 
Código:
if(gettype($array)=='array'){
    // iniciar ciclo
}else // Receber valor

O porque de eu perguntar isto, é pelo facto de que percorrer um array dissociativo, acaba por ser ciclos atrás de ciclos, o que se torna repetitivo...

Thanks Smile (tentei explicar o melhor possível xD)


RE: [PHP] Arrays dentro de Arrays - eSkiSo - 23-04-2014 23:48

Não sei se isto ajuda, nem se percebi bem o problema mas dá uma olhadela.
http://php.net/manual/en/function.array-walk-recursive.php


RE: [PHP] Arrays dentro de Arrays - dininis - 24-04-2014 14:17

é exatamente isso (se bem que tem algumas limitações para outras situações, mas para o meu caso está ótimo!)
Teoricamente, não há qualquer problema, é uma questão de simplificar o código. Agora em vez de
Código:
foreach($array as $i1 => $a){
     foreach($a as $i2 => $b){
          foreach($b as $i3 => $c){
               if($c==$Conteudo) print "Existente";
          }
     }
}
passo a ter:
Código:
function CheckIfExists($item,$key){
     if($key==1 && $item==$Conteudo) print Existente
}
array_walk_recursive($array, 'CheckIfExists');
E, com isso, que é o motivo pelo qual pedi tal função, basta chamar essa função para obter o tal $Conteudo, em vez de, cada vez que precise dele, iniciar aquela rede específica de ciclos que falei no primeiro post Smile

As limitações disto seria, apenas, se utilizasse strings como index do array, ou então se fizesse algo como
Código:
$array[0] = "valor0";
$array[1][0] = "valor1_0";
Presumo que se a função fosse imprimir todos os valores do array, este dar-me-ia algo como:
Código:
0 -> "valor0"
0 -> "valor1_0"
Ou seja, com esse método não teria como saber de onde vem o valor1_0 sem que introduza essa informação na própria string (e fazer um split() para as virgulas, por exemplo).
PORÉM, não percebi para que serve o terceiro parâmetro dessa função (mixed $userdata)... Seria para isso? Não encontro nada sobre essa coisa estranha xD

Anyways, thanks a lot Big Grin
Por acaso não esperava que houvesse, devido à forma como estava a imaginar como seria feito Tongue


RE: [PHP] Arrays dentro de Arrays - eSkiSo - 24-04-2014 14:55

Esse ultimo parâmetro serve para enviares um terceiro parametro para a função que chamas, do tipo:


Código:
array_walk_recursive($array, 'CheckIfExists');
function CheckIfExists($item,$key)


passa a ser


Código:
array_walk_recursive($array, 'CheckIfExists', $outros_parametros);
function CheckIfExists($item,$key,$outros_parametros)



RE: [PHP] Arrays dentro de Arrays - dininis - 24-04-2014 18:35

esse $outros_parametros nada tem a ver com o $array em si, sendo só mesmo para caso necessite de mais variaveis dentro da respetiva função. Percebi bem? Tongue
thanks


RE: [PHP] Arrays dentro de Arrays - eSkiSo - 24-04-2014 22:29

Yep, exactamente