Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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?

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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.