2011-02-10 1 views
2

У меня есть запятые строку проводится в пределах поля базы данных, которая может содержать любое количество значений:Переключатель размещения значений в разделителях строки с разделителями

23,45,21,40,67,22 

Мне нужно, чтобы иметь возможность как-то переключать два значения, поэтому для Например, я знаю, что нужно двигаться 45 на одну позицию вниз строки, так что я в конечном итоге с:

23,21,45,40,67,22 

причина этого заключается в том, что номера все соответствуют идентификаторам, проведенных в другой таблице базы данных, а также их положение в укус определяет порядок, по которому эти предметы будут напечатаны на экране. Прежде чем вы спросите о дизайне базы данных, я унаследовал его и не может быть изменен без существенной работы для всего приложения.

Итак, я подумал о том, чтобы взорвать строку, идентифицируя позицию целевого номера и меняя ее с помощью следующей, но я не уверен, как это можно достичь, если общее число значений не будет известен.

Любые вещи? Я подозреваю, что решение будет громоздким, но нужно обязательно!

ответ

1

при условии, что вам нужно только переместить нужное значение на одну позицию вниз в массиве:

$values = explode(',', $data_string); 

$value_to_move = 45; 

$value_count = count($values); 
for($i=0;$i<$value_count;$i++) 
{ 
    if($values[$i] == $value_to_move) 
    { 
     if($i < ($value_count-1)) 
     { // if the value to move is NOT at the end of the list already 
      $values[$i] = $values[$i+1]; 
      $values[$i+1] = $value_to_move; 
      $i++; 
     } 
    } 
} 
$new_data_string = implode(',', $values); 
+0

Это основа кода, который я сейчас использую - спасибо! – Paul

1

Я бы просто втянул их в массив и работал с ними там. Снова напишите строку в формате с разделителями-запятыми и перепишите это в БД.

+0

+1 Я как раз собирался набрать то же самое, использовать массивы, чтобы упростить работу – Jakub

0

Предполагая, что вы точно знаете, какие два значения для переключения в списке, то взрываются лучший вариант:

$array = explode(',', $string) 

# find the two values (NOTE: *NO* error handling, what if the values aren't there?) 
$index1 = array_search($first_value, $array); 
$index2 = array_search($second_value, $array); 

# swap them 
$temp = $array[$index1]; 
$array[$index1] = $array[$index2]; 
$array[$index2] = $temp; 

# rebuild the array 
$string = implode(',', $array);