Question about array in php [closed]

-4

I'm breaking my head and I'm already out of ideas, summarizing my code looks like this:

<?php

$var = 'arquivo_1'; // podendo ser arquivo_1 ou arquivo_2

$arquivo_1 = array(
"algo1" => "alguem1",
"algo2" => "alguem2"
);

$arquivo_2 = array(
"algo1" => "alguem3",
"algo2" => "alguem4"
);

// a minha função é assim:

function array_file_writte($file_array,$array){ 
$content = serialize($array);
$fd = @fopen($file_array, 'w+');
fwrite($fd,$content);
fclose($fd);
chmod($file_array, 0644);
return true;
}

// se fosse assim fucionaria corretamente:

array_file_writte($file_array,$arquivo_1);

// mas o valor da variavel $var muda, então eu precisaria fazer assim:

$var_selecionada = '$'.$var;
array_file_writte($file_array,$var_selecionada);

//algum metodo???
// mas não dá certo por que o que ele grava no arquivo acaba não sendo a variavel serializada, alguma idéia????
    
asked by anonymous 13.02.2017 / 18:10

2 answers

2

Just change the $var_selecionada = '$'.$var; to $var_selecionada = $$var; .

You should use $$var instead of '$'.$var , so you'll create a variable variable, see this here . The way you're currently doing $ is being passed as a string, which does not work.

As mentioned above would be:

$var = 'arquivo_1';

$arquivo_1 = array(
"algo1" => "alguem1",
"algo2" => "alguem2"
);

$arquivo_2 = array(
"algo1" => "alguem3",
"algo2" => "alguem4"
);

$var_selecionada = $$var;

var_dump($var_selecionada); // Somente para ver o resultado

Will return:

array(2) { 
  ["algo1"]=> string(7) "alguem1" 
  ["algo2"]=> string(7) "alguem2" 
}

This this here.

The variable variable, $$var , will execute $arquivo_1 , because $var was defined by $var = 'arquivo_1' , in the end it will do what you want.

    
13.02.2017 / 18:25
2

What if you simply change the data structure / array?

$arquivos = array(
    'arquivo_1' = array(
        "algo1" => "alguem1",
        "algo2" => "alguem2"
    ),
    'arquivo_2' = array(
        "algo1" => "alguem3",
        "algo2" => "alguem4"
    ),
);

Now get the values like this

foreach($arquivos as $nome=>$valores){
    //... valores vai ser um array e $nome o indice atual, no caso arquivo_1 ou arquivo_2
    //processa a escrita dos arquivos aqui
    array_file_writte($nome, $valores);
}

And change the writing function to something like

function array_file_writte($nomeArquivo, $lista){ 
    $content = serialize($lista);
    $fd = @fopen($nomeArquivo, 'w+');
    fwrite($fd, $content);
    fclose($fd);
    chmod($file_array, 0644);
    return true;
}
    
13.02.2017 / 18:21