1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Обработка Массива

Тема в разделе "PHP программирование", создана пользователем seoman2, 26 янв 2012.

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Есть массив в $sql = mysql_query("SELECT * FROM `user` WHERE `username` ... лалала.
    Вопрос, как циклом пройтись по результатам массива, чтобы изменить все строки в массиве, нужно там обрезать строки и записать обратно в БД
    цикл
    while ($row = mysql_fetch_array($sql))
    пытаюсь что то со строкой сделать
    $row = stripos(str($row),'символы обрезки');

    в общем посоветуйте, как резать строку, как записывать обратно в БД результат.
     
  2. ikot

    ikot Active Member

    Регистрация:
    11 июн 2008
    Сообщения:
    27
    Симпатии:
    0
    В результате вашего запроса и конструкции
    while ($row = mysql_fetch_array($sql))

    в переменной $row хранится на самом деле не строка, а целый массив строк. Ну это, конечно, в том случае, если в вашей таблице USER более одного поля(столбца). Например, если в таблице 2 поля - то в массиве $row два элемента, если 5 полей- то соответственно 5 элементов.

    Поэтому ,если вы хотите обрезать строки, а затем занести изменения в базу, то
    1) обращайтесь к нужной строке, как к элементу массива - $row[1], или $row[2] - смотря, что Вы хотите поменять
    2) Имея ключевое поле (чаще всего - это ID), Вы можете легко произвести запрос обновления к базе, используя оператор UPDATE с использованием условия WHERE 'ID' = $row[0] (это в случае, если поле ID - первое в таблице USER).

    P.S. Если Вам не удобно работать с элементами массива, то можете попробовать функцию - LIST( , , ,). И задумайтесь над тем, нужно ли Вам извлекать вообще все поля из таблицы. Может вместо * лучше через запятую укажите список изменяемых полей с ID включительно. Это может заметно понизить нагрузку на базу - и в результате повысить эффективность
     
  3. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Проблему решил. Спасибо.
    Другая проблема, не хочу клеватьь темы, как искать спец символы?
    ¦ • и просто "
    $sql = mysql_query("SELECT * FROM `user` WHERE `username` LIKE '%¦%'
    и потом в
    $len = str_replace("символ","",$len);
    вставить
     
  4. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    к примеру
    $sql = mysql_query("SELECT * FROM `user` WHERE `username` LIKE '% & bull; %'"); - разбавил пробелами содержимое like для редактора форума
    что то возвращает 0 строк, хотя есть символы такие.
    И
    $glas1 = array('¥'); тоже не отрабатывает.
     
  5. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Это вопрос не про пыхпых.
     
  6. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Эту проблему решил, есть другая:
    $file_arr - массив с 5-10 именами, а в $uname - 1 имя.
    for ($i = 0; $i < count ($file_arr); $i++) {
    //if (strcmp($file_arr[$i],$uname)==0)
    if ($file_arr[$i] == $uname)
    {echo $uname." === ".$file_arr[$i]."<br><br>";}
    else{echo $uname. " <<<>>>> ".$file_arr[$i] . "<br>";}
    }
    Не могу понять почему, но к примеру в массиве $file_arr есть Deja Vu, а сравнение не катит....
    Deja Vu <<<>>>> Deja Vu
    Но корректно работает только сравнение с последним эллементом массива $file_arr.


    Вот к примеру $file_arr:
    Amelia
    Bella Donna
    Вася
    Deja Vu
    Оля

    И отображается верно только
    Оля === Оля
     
  7. ikot

    ikot Active Member

    Регистрация:
    11 июн 2008
    Сообщения:
    27
    Симпатии:
    0
    А в переменной $uname случайно не "Оля" записано? Если у Вас такой код, как Вы привели здесь на форуме, то на экран должны показаться только те элементы массива (т.е. возле них значки ===), которые равны значению переменной $uname. Судя по всему в вашем массиве разные имена, поэтому логично, что на экран показывается только одно совпадение. Если Вы предварительно в переменную положите "Вася", то на экране опять же будет только одно совпадение -- Вася === Вася .

    А что Вы вообще хотите осуществить? Может, чем то поможем... :)
     
  8. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    а с васей тоже не катит? :)
     
Загрузка...

Поделиться этой страницей