Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
cyclop

Defenir valor num nivel de array

Recommended Posts

cyclop

Boa tarde a todos, tenho estado a ter alguns problemas no desenvolvimento de um algoritmo, queria defenir o valor de um dado nivel da array dinamicamente, e passo a exemplificar

$array = array();
$array['node1']['nivel1']['nivel2']['nivel3'] = array('key1'=>'valor','key2'=>'valor','key3'=>'valor');
$array['node2']['nivel1']['nivel1'] = array('key1'=>'valor','key2'=>'valor','key1'=>'valor');

imaginemos que eu quero adicionar a "key4 com o valor teste" no nivel 3, como poderia fazer com uma função dinâmica(estou a tentar actualmente a recursividade para tentar defenir esse mesmo valor mas ainda sem sucesso...)

Obrigado a todos os que poderem ajudar. :)

NOTA: não gostava de ter de ter de usar o EVAL.... (isto seria a maneira mais simples de resolver este problema)


"Quando eu for grande quero ser como o Celso"

Share this post


Link to post
Share on other sites
djthyrax

Recorrendo à recursividade, é só passar arrays por referência. Algo deste género:

function add($level, $key, $value, &$array, $currlevel = 0){
    if($currlevel == $level){
        $array[$key] = $value;
    }else{
        $currlevel++;
        add($level, $key, $value, $array['nivel'.(str) $currlevel], $currlevel);
    }
    return $array;
}

add(3, 'ois', 'ddtc', array()) deve retornar algo como array('nivel1' => array('nivel2' => array('nivel3' => array('ois' => 'ddtc')))).

Não testei, mas deve funcionar.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
cyclop

Obrigado djthyrax pela ajuda mas a função que criaste dará unicamente se a array respeitar os id's "nivel{numero}" e a "finalidade" é nao seguir logica  ex: $array['rse5yrtyru']['ruiu567yity']['iyu345ououiy']['uyiuytiyu']


"Quando eu for grande quero ser como o Celso"

Share this post


Link to post
Share on other sites
djthyrax

Pois, eu não sabia disso :)

De qualquer maneira, já resolveste o problema? If not, podes dar um output do var_dump() duma array dessas?


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
cyclop

DONE :thumbsup:

echo '<pre>';

$array = array();
$array['node1']['nivel1']['nivel2']['nivel3'] = array('key1'=>'valor','key2'=>'valor','key3'=>'valor');
$array['node2']['nivel1']['nivel1'] = array('key1'=>'valor','key2'=>'valor','key1'=>'valor');

function add ($index = array(), &$arrayInput = array(), $arrayAdd = array(), $level = 0)
{  
    if ($level == count($index))
    {
        $arrayInput[$arrayAdd['key']] = $arrayAdd['value'];
    }
    else
    {      
        add($index, $arrayInput[$index[$level]], $arrayAdd, ($level+1));
    }
    return $arrayInput;
}


$input = array(0=> 'node1',1 => 'nivel1' , 2 => 'nivel2' , 3 => 'nivel3');

$add=array('key'=>'key4','value'=>'valor do 4');

print_r(add($input, $array, $add));

A ideia aqui é fazer uma optimização de código CSS esta função irá servir para "não duplicar código" de css :)

Obrigado djthyrax


"Quando eu for grande quero ser como o Celso"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.