Convierta una matriz plana en una cadena delimitada para guardarla en la base de datos

7 minutos de lectura

avatar de usuario
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

  • 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

avatar de usuario
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

avatar de usuario
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

avatar de usuario
vvkatwss vvkatwss

Una de las mejores maneras:

echo print_r($array, true);

avatar de usuario
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

avatar de usuario
timdev

implosionar():

<?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

avatar de usuario
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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad