Помощник
|
Удалить последнее вхождение в строке |
fedornabilkin
|
Сообщение
#1
|
||
|
|
||
|
|||
matroskin8 |
10.4.2013, 13:32;
Ответить: matroskin8
Сообщение
#2
|
|
А покажите исходный массив и запрос(ы), который должен получиться в итоге.
|
|
|
fedornabilkin
|
Сообщение
#3
|
|
На данный момент метод выглядит так:
function field_val($par, $where=false){ $sep = ($where) ? "AND" : ","; foreach( $par as $field => $val){ $set .= " $field = '$val' $sep"; } if($where) return "WHERE" . substr($set, 0, -3); else return "SET" . substr($set, 0, -1); } Массив where array('id'=>$id, 'login'=>$login); Запрос: UPDATE users {то, что возвратит метод ( WHERE id = '1' AND login = 'fedornabilkin')} |
|
|
matroskin8 |
10.4.2013, 14:02;
Ответить: matroskin8
Сообщение
#4
|
|
Да, в принципе, так можно и оставить - обрезать 3 или 1 символ в конце.
Ну еще, как вариант, можно при формировании предиката сделать проверку и в зависимости от ее выполнения добавлять AND или запятую, т.е. проверить остались ли пары в массиве и, если таковых нет больше, то и добавляться в конец ничего не будет: foreach( $par as $field => $val){ if($set AND $field) $set .= " $sep"; // если предикат не пуст (не первая итерация) и есть очередная пара, тогда добавим AND или , $set .= " $field = '$val'"; } Тогда и обрезать, вроде как, ничего не нужно будет. |
|
|
fedornabilkin
|
Сообщение
#5
|
|
А как же отследить первую итерацию? Счетчик не охота вставлять туда.
|
|
|
fedornabilkin
|
Сообщение
#6
|
|
Немного подумал и решил просто добавлять сначала сепаратор, а потом удалять первое вхождение.
Так намного проще. В итоге получился довольно таки компактный и полезный метод. function field_val($par, $sep){ foreach( $par as $field => $val){ $set .= " $sep $field = '$val' "; } return preg_replace('#'.$sep.'#', ' ', $set, 1); } Можно еще добавить третий необязательный параметр, который будет подставляться вместо = Получится что-то типа explode, для работы с ключами и значениями. [member=matroskin8], спасибо, направил на нужную мысль. |
|
|
matroskin8 |
10.4.2013, 16:14;
Ответить: matroskin8
Сообщение
#7
|
|
А как же отследить первую итерацию? Счетчик не охота вставлять туда. А зачем нужно отслеживать первую итерацию? Она ведь и до этого, вроде как не отслеживалась. Но если все же нужна, то что мешает добавить еще одно условие - if(empty($set)){ // это и будет первой итерацией} Кстати, в моем коде выше условие немного избыточно. Проверять есть ли очередная пара - совсем не обязательно, поскольку если ее нет, то в тело цикла мы больше и не попадем. Итого, можно так: foreach( $par as $field => $val){
if(empty($set)){ // первая итерация, поскольку предикат пока пуст }else{ $set .= " $sep"; // если предикат не пуст (не первая итерация), тогда добавим AND или , } $set .= " $field = '$val'"; } |
|
|
fedornabilkin
|
Сообщение
#8
|
|
Если на то пошло, тогда двумя строками ограничиваемся
foreach( $par as $field => $val){ if(empty($set)) $set .= " $field = '$val'"; else $set .= " $sep $field = '$val"; } Вообще красота |
|
|
matroskin8 |
10.4.2013, 16:52;
Ответить: matroskin8
Сообщение
#9
|
|
|
Ну да)
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Нужно удалить сообщение из форума негативный отзыв |
1 | gruz333 | 2992 | 14.9.2018, 9:59 автор: Palundra |
|
Нужно удалить второй description Ищется спец по wordpress |
3 | Ksardas777 | 2110 | 21.3.2017, 15:54 автор: Ksardas777 |
|
Нужно удалить следы вирусной атаки на сайт Залили дор |
3 | Ksardas777 | 1817 | 7.3.2017, 14:31 автор: Ksardas777 |
|
Удалить @media для мобильных устройств / HTML, CSS | 2 | The World Is Mine | 9102 | 7.2.2014, 20:10 автор: -LyalinDV- |
|
Помогите удалить вирус на joomla 1.5 Готов оплатить помощь. |
5 | pulsar21 | 4407 | 17.5.2013, 8:00 автор: pulsar21 |
Текстовая версия | Сейчас: 20.4.2024, 0:47 |