2015-08-10 3 views
0

У меня для вас сегодня сложная задача. Я пытаюсь настроить систему инвентаризации (через mysqli и базу данных).Удалите элемент из массива explode()

Я хранил элементы, основанные на их идентификаторе, в строке. (I.E. "1,0,2,1,0"). Чтобы прочитать инвентарь, я использую функцию «взорвать».

Мне нужно найти способ «удалить» предмет из инвентаря.

Например, скажем, инвентарь установлен на «1,2,3,4,5», и я хочу, чтобы удалить элемент 3.

Это оставит множество инвентаризации «1,2,4 , 5" .

Есть ли способ сделать это? Единственная информация, которая у меня есть, связана с расположением элемента в строке - это место в массиве, созданное функцией explode.

+1

_Я храню элементы, основанные на их идентификаторе, в строке. (I.E. «1,0,2,1,0») _ <<< не делайте этого – baao

+0

Любые предложения по альтернативным методам? –

+0

Вы должны сделать array_search(), чтобы получить ключ, а затем снова отменить этот ключ перед повторным подключением ..... это действительно плохой подход ... нормализация вашей базы данных намного лучше –

ответ

1

Хотя тривиальное решение было дано @MarkBaker в комментариях (используйте array_search, чтобы найти ключ, затем unset ключ), я покажу вам, как первыми преобразовать данные в нечто пригодное для использования.

$items = explode(",",$inventory); // this is presumably what you have so far 
$clean_inventory = array(); 
foreach($items as $item) { 
    if(!isset($clean_inventory[$item])) $clean_inventory[$item] = 0; 
    $clean_inventory[$item]++; 
} 

// now delete the item you want 
unset($clean_inventory[$item_to_delete]); 
// or, if you only want to remove one item, 
// $clean_inventory[$item_to_delete]--; 

// re-save in the "ugly" format... 
$saved = array(); 
foreach($clean_inventory as $item=>$quantity) { 
    $saved = array_merge($saved,array_fill(0,$quantity,$item)); 
} 
$saved = implode(",",$saved); 

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

+0

. Это правильный способ справиться с этой проблемой. Хотя система, которую я использую, предназначена только для тестирования, теперь я могу ОПРЕДЕЛЕННО видеть преимущества хранения элементов и количества для каждого пользователя в отдельной таблице. Спасибо вам за помощь, Нит! Я отмечу это как ответ как можно скорее. –

Смежные вопросы