felipe kirkbride
¿Cuál es el mejor método para convertir una matriz de PHP en una cadena?
tengo la variable $type
que es una matriz de tipos.
$type = $_POST[type];
Quiero almacenarlo como una sola cadena en mi base de datos con cada entrada separada por |
:
Sports|Festivals|Other
Niet el oscuro Absol
Usar implosionar
implode("|",$type);
-
Esto es bueno a menos que tenga matrices anidadas, lo que puede suceder con
$_POST
si está utilizando entradas de formulario con nombre de matriz.– Leith
24 de octubre de 2016 a las 4:47
-
con matrices anidadas solo use un foreach funcionará.
– devasia2112
26 de marzo de 2019 a las 13:31
-
@ devasia2112 foreach para una matriz anidada no será una solución buena/eficiente… ¿si está anidada en varios niveles? y si en algún lugar la profundidad es 2 y en algún lugar 3? ¡Será demasiado sobrecarga y la complejidad del programa será peor en ese caso! La serialización es mucho mejor en este caso.
– Alicia
13 de agosto de 2021 a las 5:35
Puedes usar json_encode()
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
Más tarde solo usa json_decodificar() para decodificar la cadena de su base de datos.
¡Cualquier otra cosa es inútil, JSON mantiene intacta la relación de la matriz para su uso posterior!
-
“Cualquier otra cosa es inútil“… excepto quizás normalizar los datos.
– Dan Lug
17 de junio de 2013 a las 19:51
-
Rofl @ comentario encima de mí. Como usted dice, las declaraciones generales casi siempre son inútiles.
– Aarón Cole
20 de agosto de 2013 a las 23:17
-
Me alegro de que se hayan entretenido 🙂
– Jakub
23 de agosto de 2013 a las 14:52
-
“Las generalizaciones radicales, así como los absolutos, siempre están mal. Siempre”. 😉
– Olie
12/10/2015 a las 21:52
-
Me gusta que este guarde las llaves. Esto es muy útil para su uso posterior.
– Apolimóxico
16 de julio de 2019 a las 22:29
sumit kumar
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array
POR QUÉ JSON: puede usarlo con la mayoría de los lenguajes de programación, la cadena creada por la función serialize () de php solo se puede leer en PHP, y no le gustará almacenar tales cosas en sus bases de datos, especialmente si la base de datos se comparte entre aplicaciones escritas en diferentes lenguajes de programación
-
JFI en mi uso tuve que llamar a $data= json_decode($jsonString, true)
– Terminalidad
14 de octubre de 2016 a las 6:57
-
El segundo argumento es opcional, en la mayoría de los casos funciona sin eso.
– Sumit Kumar
21 de diciembre de 2016 a las 18:58
-
Esto funciona excelente para matrices de una o varias dimensiones y, en mi opinión, esta debería ser la respuesta aceptada. También considere agregar verdadero como segundo parámetro.
– Combinar
14 de marzo de 2017 a las 11:33
vvkatwss vvkatwss
Una de las mejores maneras:
echo print_r($array, true);
Incógnito
No, no desea almacenarlo como una sola cadena en su base de datos de esa manera.
podrías usar serialize()
pero esto hará que sus datos sean más difíciles de buscar, más difíciles de trabajar y desperdiciará espacio.
También podría hacer alguna otra codificación, pero generalmente es propenso al mismo problema.
La razón principal por la que tiene un DB es para que pueda realizar un trabajo como este de manera trivial. No necesita una tabla para almacenar matrices, necesita una tabla que pueda representar como una matriz.
Ejemplo:
id | word
1 | Sports
2 | Festivals
3 | Classes
4 | Other
Simplemente seleccionaría los datos de la tabla con SQL, en lugar de tener una tabla que se vea así:
id | word
1 | Sports|Festivals|Classes|Other
No es así como alguien diseña un esquema en una base de datos relacional, anula totalmente su propósito.
-
seguro que lo es, ¡no tienes que escapar de los delimitadores!
– Chris G.
20 de septiembre de 2011 a las 19:16
-
@MarcB Hace que la codificación sea a prueba de idiotas, estándar, propensa a menos errores y fácilmente exportable a una matriz. ¿Debería usar otra mesa? Probablemente. ¿Es esto mejor que todos diciendo implosión? Absolutamente.
– Incógnito
20 de septiembre de 2011 a las 19:17
-
La respuesta correcta a esta pregunta sería: no inserte valores serializados en un RDBMS. Este es el tipo de cosas que deberían convocar rapaces.
– NullUserException
20 de septiembre de 2011 a las 19:20
-
@timdev: json-escaping puede corresponder en algunas situaciones a SQL escape, pero dependiendo de eso, al final lo quemará. JSON usa barras diagonales inversas: ¿qué sucede si está en una base de datos que no reconoce las barras diagonales inversas y usa comillas dobles para escapar? p.ej
''
en vez de\'
?– Marc B.
20 de septiembre de 2011 a las 19:20
-
Si bien estoy de acuerdo con el principio expresado aquí (las formas normales son buenas, usar DB para estructurar es bueno, duh), cualquier responder que empieza con “No, no quieres…” hace sonar campanas en mi cabeza. No tienes el contexto completo de la pregunta del autor de la pregunta, y lo creas o no, es posible que solo tenga una excelente razón para desnormalizar estos datos en particular y almacenarlos en un solo campo. No, no eres omnisciente; NO sabes lo que quiere el que pregunta. Pon tus opiniones en un comentariono un responderpor favor.
– sistema PAUSA
11 de mayo de 2014 a las 3:58
timdev
<?php
$string = implode('|',$types);
Sin embargo, Incognito tiene razón, probablemente no quiera almacenarlo de esa manera, es una pérdida total del poder relacional de su base de datos.
Si está decidido a serializar, también podría considerar usar json_encode()
-
seguro que lo es, ¡no tienes que escapar de los delimitadores!
– Chris G.
20 de septiembre de 2011 a las 19:16
-
@MarcB Hace que la codificación sea a prueba de idiotas, estándar, propensa a menos errores y fácilmente exportable a una matriz. ¿Debería usar otra mesa? Probablemente. ¿Es esto mejor que todos diciendo implosión? Absolutamente.
– Incógnito
20 de septiembre de 2011 a las 19:17
-
La respuesta correcta a esta pregunta sería: no inserte valores serializados en un RDBMS. Este es el tipo de cosas que deberían convocar rapaces.
– NullUserException
20 de septiembre de 2011 a las 19:20
-
@timdev: json-escaping puede corresponder en algunas situaciones a SQL escape, pero dependiendo de eso, al final lo quemará. JSON usa barras diagonales inversas: ¿qué sucede si está en una base de datos que no reconoce las barras diagonales inversas y usa comillas dobles para escapar? p.ej
''
en vez de\'
?– Marc B.
20 de septiembre de 2011 a las 19:20
-
Si bien estoy de acuerdo con el principio expresado aquí (las formas normales son buenas, usar DB para estructurar es bueno, duh), cualquier responder que empieza con “No, no quieres…” hace sonar campanas en mi cabeza. No tienes el contexto completo de la pregunta del autor de la pregunta, y lo creas o no, es posible que solo tenga una excelente razón para desnormalizar estos datos en particular y almacenarlos en un solo campo. No, no eres omnisciente; NO sabes lo que quiere el que pregunta. Pon tus opiniones en un comentariono un responderpor favor.
– sistema PAUSA
11 de mayo de 2014 a las 3:58
T.Todua
Este guarda CLAVES Y VALORES
function array2string($data){
$log_a = "";
foreach ($data as $key => $value) {
if(is_array($value)) $log_a .= "[".$key."] => (". array2string($value). ") \n";
else $log_a .= "[".$key."] => ".$value."\n";
}
return $log_a;
}
Espero que ayude a alguien.
Absténgase de insertar valores serializados en una base de datos. He aquí por qué: stackoverflow.com/questions/7364803/…
– NullUserException
20 de septiembre de 2011 a las 19:15
@NullUserExceptionఠ_ఠ Estoy de acuerdo en que insertar valores serializados en la base de datos simplemente quema los ojos, pero no conoce su situación; tal vez esté justificado.
– Hacker enojado
21 de septiembre de 2011 a las 6:26
Creo que esta pregunta debe ser reabierta. Es una pregunta útil para principiantes y no creo que esté fuera de tema.
– SaidbakR
23 de febrero de 2014 a las 16:47
¿Qué pasa si algunos de los valores en la matriz tienen caracteres?
– Sumit Kumar
20 mayo 2014 a las 11:22
A continuación, puede escapar de esos personajes. Léalo aquí. php.net/manual/en/regexp.reference.escape.php
– FortuneSoldier
26 de febrero de 2018 a las 13:03