[PHP] Converter array multidimensional em unidimensional

Armadillo

Folding Member
Ola pessoal.
Entao e assim , tenho o codigo em php que pesquisa todos os directorios que existem num dado directorio pai.
O que se passa e que o meu algoritmo retorna o resultado num array multidimensional.

Ja tentei utilizar o array_merge mas so me retorna um vector com os valores "array", "array", "array", ........

Existe alguma forma de tornar um array multidimensional em unidimensional?

Obrigado
 
Ola pessoal.
Entao e assim , tenho o codigo em php que pesquisa todos os directorios que existem num dado directorio pai.
O que se passa e que o meu algoritmo retorna o resultado num array multidimensional.

Ja tentei utilizar o array_merge mas so me retorna um vector com os valores "array", "array", "array", ........

Existe alguma forma de tornar um array multidimensional em unidimensional?

Obrigado

Tenta:

Código:
$arr[0][] = "0,0";
$arr[0][] = "0,1";
$arr[0][] = "0,2";
$arr[0][] = "0,3";
$arr[0][] = "0,4";
$arr[1][] = "1,0";
$arr[1][] = "1,1";
$arr[1][] = "1,2";
$arr[1][] = "1,3";
$arr[1][] = "1,4";

foreach($arr as $key => $arr_uni)
{
  foreach($arr_uni as $key2 => $value)
  {
    $new_arr_uni[] = $value;
  }
}

var_dump($arr);
var_dump($new_arr_uni);

resultado:

Código:
array(2) {
  [0]=>
  array(5) {
    [0]=>
    string(3) "0,0"
    [1]=>
    string(3) "0,1"
    [2]=>
    string(3) "0,2"
    [3]=>
    string(3) "0,3"
    [4]=>
    string(3) "0,4"
  }
  [1]=>
  array(5) {
    [0]=>
    string(3) "1,0"
    [1]=>
    string(3) "1,1"
    [2]=>
    string(3) "1,2"
    [3]=>
    string(3) "1,3"
    [4]=>
    string(3) "1,4"
  }
}
array(10) {
  [0]=>
  string(3) "0,0"
  [1]=>
  string(3) "0,1"
  [2]=>
  string(3) "0,2"
  [3]=>
  string(3) "0,3"
  [4]=>
  string(3) "0,4"
  [5]=>
  string(3) "1,0"
  [6]=>
  string(3) "1,1"
  [7]=>
  string(3) "1,2"
  [8]=>
  string(3) "1,3"
  [9]=>
  string(3) "1,4"
}

Funciona "bem" senao estiveres interessado nas chaves, porque quando ha colisao de chaves perdes informaçao.
 
mcog_blaster, obrigado pelo reply, mas acho q nao e possivel utilizar a tua sugestao, pq este meu vector tem uma dimensao nao definida, depende das directorias que o script encontrar.

Tyran, ja procurei la, n tem nada que satisfaça as minhas necessidade, mas mesmo assim, obrigado pelo a ajuda.
O que querias dizer com " Não podes passar isso por referência presumo?". Passar o quê pra onde?

Obrigado
 
Uma ideia talvez muito primitiva é percorrer o array principal (eventualmente passando os valores para outro array "auxiliar") e, de cada vez que encontras um array, ele vai percorre-lo para fazer o mesmo: ir retirar os valores.

Isto na teoria deve funcionar (no fundo passa por uma função de percorrer a chamar-se a ela própria de cada vez que encontra um array, recursivamente as vezes que forem necessárias)), mas cheira-me que há formas mais eficientes de fazer isto.
 
Se eu fizer isto:
Código:
function listaArray(&$item2, $key)
{
    echo "$item2<br>\n";
    array_walk($item2, 'listaArray');
}


$array = pesquisa_dir_recursivamente('..');     //ler disco em busca de dirs
array_walk($array, 'listaArray');                //retornar apenas as dirs
a funçao printa tudo como eu quero, mas como é qu eu mando isto num array para fora??
 
Última edição:
Acho que é isto:
Código:
function listaArray(&$item2, $key)
{
global $pastas;
    //echo "$item2<br>\n";
    if (!is_array($item2) && !is_null($item2))
        {
        $pastas[]=$item2;
        }
    array_walk($item2, 'listaArray');
}
o vector de retorno é $pastas.
O q acham?
 
Última edição:
Tipo ao chamares a função que faz isso mandas como parâmetro o array na função onde irás meter as dirs que queres, se fizeres isso por referência, com o & ele altera o valor sem que tenhas de retornar nada...
Pelo menos comigo aqui numa coisinha simples resultou
<?php
function aa (&$lol) {

$lol[0][1]=3;
}

$lol[0][1]=4;
aa($lol);

echo $lol[0][1];
?>
Se estou a perceber mal, desculpa
cumpzz
 
Última edição:
$multi
PHP:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => Array
        (
            [0] => 1.1
            [1] => 1.2
            [2] => 1.3
            [3] => Array
                (
                    [key] => hummmm
                )
        )
)
$junto
PHP:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 1.1
    [4] => 1.2
    [5] => 1.3
    [6] => hummmm
)

A função que fez isto:
PHP:
function unidim ($arr) {
global $junto;
foreach ($arr as $v) {
if (!is_array($v)) {
$junto[]=$v;
}
else {
unidim ($v);
}
}
}
Repara que as chaves não aparecem apenas os valores key=>"humm" apenas "humm" aparece.
Penso que seja isto.
 
Última edição:
Back
Topo