Executando um array que vem dentro de uma string Tenho uma consulta no banco de dados retorna um array multidimensional (pelo menos a sintaxe) que seriam colunas de uma tabela, algo assim: "array(array('titulo' => 'Peso', 'valor' => 100, 'referencia' => '[a1.1.1]'), array('titulo' => 'Nota', 'valor' => 94.1, 'referencia' => '[a2.1.1]'), array('titulo' => 'percentual', 'valor' => 0.0, 'referencia' => '[a3.1.1]'...
JF
Executando um array que vem dentro de uma string  
Tenho uma consulta no banco de dados retorna um array multidimensional (pelo menos a sintaxe) que seriam colunas de uma tabela, algo assim:
"array(array('titulo' => 'Peso', 'valor' => 100, 'referencia' => '[a1.1.1]'), array('titulo' => 'Nota', 'valor' => 94.1, 'referencia' => '[a2.1.1]'), array('titulo' => 'percentual', 'valor' => 0.0, 'referencia' => '[a3.1.1]'))";

e gostaria que o PHP transformasse (executasse) essa string em um array.
Algumas alternativas que usei e não funcionaram (a titulo de exemplo):
 
  1. <?php
  2. // vindo do DB
  3. $executa = "array(array('titulo' => 'Peso', 'valor' => 100, 'referencia' => '[a1.1.1]'),
  4. array('titulo' => 'Nota', 'valor' => 94.1, 'referencia' => '[a2.1.1]'),
  5. array('titulo' => 'percentual', 'valor' => 0.0, 'referencia' => '[a3.1.1]'))";
  6. $resposta = $executa; // Não funciona, não converte em array
  7. $respostas = (array) $array; // Não funciona, não converte em array
  8. $respostas = (object) $array; // Não funciona, não converte em objeto
  9. ?>

Alguém se habilita? Pablo?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


JF

Falha nossa...
 
  1. <?php
  2. // vindo do DB
  3. $executa = "array(array('titulo' => 'Peso', 'valor' => 100, 'referencia' => '[a1.1.1]'),
  4. array('titulo' => 'Nota', 'valor' => 94.1, 'referencia' => '[a2.1.1]'),
  5. array('titulo' => 'percentual', 'valor' => 0.0, 'referencia' => '[a3.1.1]'))";
  6. $resposta = $executa; // Não funciona, não converte em array
  7. // código correto
  8. $respostas = (array) $executa ; // Não funciona, não converte em array
  9. $respostas = (object) $executa ; // Não funciona, não converte em objeto
  10. ?>

AC

Boa tarde.

Talvez facilite se vc informar como chegou a essa string.
Pode ser que consiga, sem garantias, https://www.php.net/manual/pt_BR/function.unserialize.php.

Espero ter ajudado.
LG

Não sei se entendi direito, mas se fizer isso:
 
  1. <?php
  2. $executa = "array(array('titulo' => 'Peso', 'valor' => 100, 'referencia' => '[a1.1.1]'),
  3. array('titulo' => 'Nota', 'valor' => 94.1, 'referencia' => '[a2.1.1]'),
  4. array('titulo' => 'percentual', 'valor' => 0.0, 'referencia' => '[a3.1.1]'))";
  5. $remover = array("array", "(", ")", "'", "[", "]", ">", " ");
  6. $executa = str_replace($remover, '', $executa);
  7. $primeiro = explode(",", $executa);
  8. $arrayFinal = array();
  9. foreach ($primeiro as $a){
  10. $u = explode("=", $a);
  11. $u[0] = trim($u[0]);
  12. $u[1] = trim($u[1]);
  13. $arrayFinal[] = $u;
  14. }
  15. var_dump($arrayFinal);
  16. ?>

vai ter um array.
LG

array (size=9) 0 => array (size=2) 0 => string 'titulo' (length=6) 1 => string 'Peso' (length=4) 1 => array (size=2) 0 => string 'valor' (length=5) 1 => string '100' (length=3) 2 => array (size=2) 0 => string 'referencia' (length=10) 1 => string 'a1.1.1' (length=6) 3 => array (size=2) 0 => string 'titulo' (length=6) 1 => string 'Nota' (length=4) 4 => array (size=2) 0 => string 'valor' (length=5) 1 => string '94.1' (length=4) 5 => array (size=2) 0 => string 'referencia' (length=10) 1 => string 'a2.1.1' (length=6) 6 => array (size=2) 0 => string 'titulo' (length=6) 1 => string 'percentual' (length=10) 7 => array (size=2) 0 => string 'valor' (length=5) 1 => string '0.0' (length=3) 8 => array (size=2) 0 => string 'referencia' (length=10) 1 => string 'a3.1.1' (length=6)
JF

Exato Leoardo, o problema é que é uma matriz multidimensional, então minha ideia era de formatar a consulta para que já viesse prontinha, mas não consegui executá-la no PHP. Minha segunda opção seria utilizar a função preg_split() que, segundo o manual (https://www.php.net/manual/pt_BR/function.preg-split.php), resolveria o problema, mas não consegui entender o primeiro parâmetro da função (expressões regulares). Enfim, resolvi com a função MultiExplode, que é recursiva e dá um explode dentro de outro, formando arrays multidimensionais, como eu precisava. Segue um exemplo:

 
  1. <?php
  2. /**
  3. * MultiExplode
  4. * $delimiters - array com todos os caracteres a serem buscados
  5. * $string - string a ser transformada em array
  6. * Example of use:
  7. * $string = "1-2-3|4-5|6:7-8-9-0|1,2:3-4|5";
  8. * $delimiters = Array(",",":","|","-");
  9. * $res = Uteis::MultiExplode($delimiters,$string);
  10. */
  11. public static function MultiExplode ($delimiters,$string)
  12. {
  13. $ary = explode($delimiters[0],$string);
  14. array_shift($delimiters);
  15. if($delimiters != NULL)
  16. {
  17. foreach($ary as $key => $val)
  18. {
  19. $ary[$key] = Uteis::MultiExplode($delimiters, $val);
  20. }
  21. }
  22. return $ary;
  23. }
  24. ?>


P.S.: Coloquei-a em uma classe que mantenho em app/lib/widget chamada Uteis.