Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
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?

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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.