2012-05-22 1 views
-1

У меня есть строка в моей таблице, которая отображается как таковая;Разбиение строки таблицы SQL на php-переменные

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

Мне интересно, как я мог хранить их в переменных php, чтобы я мог отображать их пользователю. Элемент «/» разделяет элементы, а «:» разделяет части элемента.

Я не знаю, имеет ли это смысл, но это так;

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

Так что я хочу, чтобы отделить элементы, а затем хранить Itemid и количество в переменный Dislay пользователя.

Я попытался использовать функцию разрыва;

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

Но я не знаю, как разделять ItemID и количество.

Любая помощь?

+4

Если вы нормализуете свою базу данных, у вас не будет таких проблем –

+2

Я думаю, что вы можете повторить взрыв в каждой части, используя explode (":", шт. Однако, похоже, что структура базы данных должна иметь отдельный строка для каждого элемента и количества, а затем объединяет их все в одну строку. –

ответ

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

Большое спасибо. Как я могу настроить его так, чтобы id = $ id и quanity = $ qty? – user1394849

+0

Просто удалите вторую строку из цикла foreach. –

+0

Спасибо, что работает отлично. Еще одна вещь, есть ли в любом случае, он может игнорировать последний «/», который находится в конце строки? Я получаю сообщение об ошибке, потому что он ищет «: 'в последнем элементе, но его нет. – user1394849

1

Воспользуйтесь 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 
) 
*/ 

Если это возможно, сохранить значение в таблицу, как serialized array.