Dividir una fila de tabla SQL en variables php

Tengo una fila en mi tabla que se muestra como tal;

2:2/3:1/17:1/6:1/1:1/

Me pregunto cómo podría almacenarlos en variables php para poder mostrárselos al usuario. El '/' separa los elementos y el ':' separa las partes del elemento.

No sé si eso tiene sentido, pero es así;

itemID:quantity/itemID:quantity/itemID:quantity/

Así que quiero separar los artículos y luego almacenar el ID del artículo y la cantidad en variables para mostrar al usuario.

He intentado usar la función de explosión;

$pieces = explode("/", $order_details);

Pero no sé cómo separar el itemID y la cantidad.

¿Alguna ayuda?

preguntado el 22 de mayo de 12 a las 15:05

Si normaliza su base de datos, no tendrá problemas como este:

Creo que puede repetir la explosión en cada pieza, usando explotar(":", pieza. Sin embargo, parecería que la estructura de su base de datos debería tener una fila separada para cada artículo y cantidad, en lugar de combinarlos todos en una sola cadena. -

2 Respuestas

$pieces = explode("/", rtrim($order_details, '/'));
$items = array();
foreach ($pieces as $piece)
{
    list($id, $qty) = explode(':', $piece);
    $items[$id] = $qty;
}

contestado el 22 de mayo de 12 a las 15:05

Muchas gracias. ¿Cómo haría para configurarlo de modo que id = $id y quanity = $qty? - user1394849

Simplemente elimine la segunda línea del ciclo foreach. - John Conde

Gracias eso funciona perfectamente. Una cosa más, ¿hay alguna forma de ignorar el último '/' que está al final de la cadena? Recibo un error porque está buscando el ':' en el último elemento, pero no hay ninguno. - user1394849

Simplemente quítelo usando substr() or rtrim(). Vea mi respuesta actualizada para ver un ejemplo. - John Conde

Eres un verdadero caballero, amigo. Gracias. - user1394849

Aprovechar parse_str.

<?php
$str = '2:2/3:1/17:1/6:1/1:1/';
$str = str_replace(array(':', '/'), array('=', '&'), $str);

parse_str($str, $vars);

/*
$vars now:
Array
(
    [2] => 2
    [3] => 1
    [17] => 1
    [6] => 1
    [1] => 1
)
*/

Si es posible, almacene el valor en su tabla como matriz serializada.

contestado el 22 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.